www.ylrr.net > mAtlAB加速迭代法代码

mAtlAB加速迭代法代码

function T=romberg(a,b,n) h=b-a; f=inline('x'); T=zeros(2,n); T(1,1)=(f(a)+f(b))*h/2; for i=2:n s=0.0; for j=1:(2^(i-2)); s=s+f(a+(j-0.5)*h); end T(2,1)=T(1,1)/2+s*h/2; for k=2:i T(2,k)=((4^(k-1))*T(2,k-1)-T(1,k-1))/((4^(k-1))-1); end h=h/2; for j=1:i T(1,j)=T(2,j); end end 这是romberg迭代法的源代码

MATLAB是一种解释性语言,从运行效率来说肯定远不如其他基本语言.但还是有些方法可以提高运行速度的:1,MATLAB擅长于矩阵运算,但并不适用于循环,能不用循环的地方尽量用矩阵运算代替;2,对于大维度的矩阵,要预先确定它的维度,比如用zeros(a,b,c)预先定义好,这样每次给矩阵赋值的时候就不用改变维度了,对运算速度的提高很明显,这点你可以用MATLAB自带的tic和toc命令测试.3.对于多重循环的将长的循环放在内循环.还有对有相似功能的命令的选择也对速度有影响.如果对于计算量特别大的程序,用MATLAB是不怎么合适的哦,你可以把计算部分用其他语言,比如FORTRAN来实现.

k=input('输入k:');X0=input('输入X0:');X(1)=X0;for i=2:2000X(i)=1-k*X(i-1)^2;%需要输出中间结果去掉分号endX(2000)

1)for循环那里x=1.4后面应为冒号2)for 少了对应的end3)for循环里x_derivative为sym类型,不能直接运算,需用subs代入数值4)迭代算法需要大改,n没有定义

%迭代公式 x(k+1)=(sum(r*w*xi)/di(k))/(sum(r*w*xi));% y(k+1)=(sum(r*w*yi)/di(k))/(sum(r*w*xi));% di(k+1)=sqrt((x(k)-xi)^2+(y(k)-yi)^2);r=0.8;w=[6398014.98,6525900.99,3752178.53,1400985.31,2495271.42,1506266.52,1953408.82];xi=[117.00,118.

N=1000; x=[-.8,zeros(1,N)]; for n=0:N-1 x(n+1+1)=x(n+1)^2-2;%matlab从1开始编号,所以再+1 end plot(0:N,x)

1.exitflag>0---算法收敛=0---达到最大迭代次数而停止<0---算法收敛你这里出现=0,不见得是不收敛,但是至少肯定此迭代公式收敛速度过慢.初值的选择固然非常重要,但是要不断尝试显然不是办法.2.我想说一说,如何构造迭代函数使之具有

function y=f(x)y=f(x);%函数f(x)的表达式endfunction z=h(x)z=h(x);%函数h(x)的表达式end x=X;%迭代初值i=0;%迭代次数计算while i<= 100%迭代次数x0=X-f(X)/h(X);%牛顿迭代格式if abs(x0-X)>0.01;%收敛判断X=x0;else breakendi=i+1;endfprintf('\n%s%.4f\t%s%d','X=',X,'i=',i) %输出结果

根据我的一些经验和相关的参考资料,要想提高其运算的速度,以下的方法可以试一下:(1)尽可能地用向量化的数组运算代替循环,尽可能地减少使用户for或while循环,这是因为matlab执行循环运算效率很低而数组运算效率较高.举个最经

主程序:function [k,x,wuca,yx] = newton(x0,tol)k=1;yx1=fun(x0);yx2=fun1(x0);x1=x0-yx1/yx2;while abs(x1-x0)>tolx0=x1;yx1=fun(x0);yx2=fun1(x0);k=k+1;x1=x1-yx1/yx2;endk;x=x1;wuca=abs(x1-x0)/2;yx=fun(x);end分程序1:function y1=fun(x)y1=sqrt(x^2+1

网站地图

All rights reserved Powered by www.ylrr.net

copyright ©right 2010-2021。
www.ylrr.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com