matlab迭代算法程序
⑴ 求迭代分形的MATLAB程序
function
cycle6(px,py,r,n)
%px,py和r分别是大圆圆心坐标和半径,n是迭代次数
%例子:
%cycle6(0,0,1,4);axis
equal
t=linspace(-pi,pi);
plot(r*cos(t)+px,r*sin(t)+py)
theta=pi/3*(0:5);
newr=r/3;
newpx=px+2*newr*cos(theta);
newpy=py+2*newr*sin(theta);
if
n>1
for
i=1:6
hold
on;cycle6(newpx(i),newpy(i),newr,n-1);
end
end
⑵ 怎样在matlab中执行循环迭代
在matlab中执行循环主要是利用for语句。如下
x = 0.3;
for i = 1:1000
x = (x+2.5)*x;
end
在matlab中运行结果如图:
算出来的X1000是无穷大
(2)matlab迭代算法程序扩展阅读
malab中循环的用法
循环输出变量
for i=1:4
i
end
其中1:4代表一个行向量1 2 3 4,在matlab中,行向量的另外一个表示方法是[1 2 3 4],即for i=1:4等价于for i=[1 2 3 4],编写程序时牢记一个点:对于某次固定的迭代,i会从这个向量中取一个值,该值可以参与循环中的计算。
修改迭代步长
例子:遍历1~10之间的所有奇数
for i=1:2:10
i
end
其中1:2:10表示迭代从1开始,步长为2,最大不超过10,即代表行向量1 3 5 7 9。
⑶ 用matlab做,牛顿迭代法
function [ A ] = cal( a,b,v )%a,b表示区间,v是精度
i=1;
x = (a+b)/2;
A=[i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
while(abs(t-x)>v)
i=i+1;
x = t;
A = [A;i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
end
A = [A;i+1 t];
end
运行结果:
>> format long;
>> cal(1,2,0.00001)
ans =
1.000000000000000 1.500000000000000
2.000000000000000 1.347826086956522
3.000000000000000 1.325200398950907
4.000000000000000 1.324718173999054
5.000000000000000 1.324717957244790
⑷ MATLAB简单迭代法
z(1)=m;
z(2)=(z(1)+(m)/(z(1)))/2;
i=1;
while abs(z(i+1)-z(i))>=1.0000e-005
z(i+2)=(z(i+1)+(m)/(z(i+1)))/2;
i=i+1;
end
yf=z(i+1)
以上程序已经经过测试
别忘了:执行程序之前,先给m赋值,否则会报错的!
⑸ 牛顿迭代算法的matlab程序
% 用牛顿下山法求解方程
function [x,k]=myfun_newton(f,x0,emg)
% f表示非线形方程
% x0迭代初值,此种方法是局部收敛,初值要选择恰当
% emg是精度指标
% k,u分别表示迭代次数和下山因子
% d1表示非线形方程f在x0处的导数值
[f1,d1]=feval(f,x0);
k=1;
x(1)=x(0);
x(2)=x(1)-f1/d1;
while abs(f1)>emg
u=1;
k=k+1;
[f1,d1]=feval(f,x(k));
x(k+1)=x(k)-u*f1/d1;
while abs(f2)>abs(f1)
u=u/2;
x(k+1)=x(k)-u*f1/d1;
[f2,d2]=feval(f,x(k+1));
end
end
这个收敛速度快,建议给你用下
⑹ 请问怎么用matlab实现牛顿迭代法,有具体的代码吗,谢谢
牛顿迭代法matlab实现如下:
function [x_star,index,it] = Newton(fun,x,ep,it_max)
%求解非线性方程的牛顿法
%第一个分量是函数值,第二个分量是导数值
% x为初始点
% ep为精度,当 | x(k)-x(k-1) |<ep时,终止计算,缺省值为1e-5
% it_max为最大迭代次数,缺省值为100
% x_star为当迭代成功时,输出方程的根
% 当迭代失败,输出最后的迭代值
% index为指标变量,当index=1时,表明迭代成功
% 当index=0时,表明迭代失败(迭代次数>=it_max)
% it为迭代次数
if nargin<4 it_max=100;end
if nargin<3 ep=1e-5;end
index=0;k=1;
while k<it_max
x1=x;f=feval(fun,x);
x=x-f(1)/f(2);
if abs(x-x1)<ep
index=1;break;
end
k=k+1;
end
x_star=x;it=k;
程序示例如下:
fun=inline('[x^3-x-1,3*x^2-1]');
[x_star,index,it] = Newton(fun,1.5)
⑺ MATLAB函数迭代,这个程序怎么编
p0=1;
v0=2;
%第一次迭代
k(1)=K(P0,V0);
p(1)=p (K(1));
V(1)=v (K(1));
%第2到第100次迭代
for i=2:100%假设迭代100次
k(i)=K(P(i-1),V(i-1));
p(i)=p (K(i));
V(i)=v (K(i));
end
%这样就可以了,迭代几次自己改,希望采纳
⑻ 用MATLAB编出牛顿迭代法的程序
function newton(x0,e,N)
%输入xo为估计的迭代初值,e为规定的误差,N为最大迭代次数.
%输出x,y为最后迭代的两个近似根,k为迭代次数.
clc
format long;
disp('迭代次数 近似根')
k=0;
x1=0;
x2=x0;
while (abs(x2-x1))>e
x1=x2;
x2=x1-f(x1)./df(x1);
k=k+1;
if k>N
return;
end
%%%%%%记录并输出%%%%%%%%%
o1=sprintf('%3d',k);
o2=sprintf('%3.8f',x2);
OL=[o1,' ' o2];
disp(OL);
y(k)=x2;
end
%%%%画图%%%%%%%
i=1:k;
figure(2)
plot(i,y,'rD-')
grid on
xlabel('迭代次数')
ylabel('近似根')
title(['牛顿法求出的该方程的近似根 x^*=', num2str(x2,9)])
function y=f(x)
y=x^2/2-sin(x)-1;
function y=df(x)
y=x-cos(x);
⑼ 牛顿迭代法的matlab代码
function y=f(x)
y=f(x);%函数f(x)的表达式
end
function 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 break
end
i=i+1;
end
fprintf('
%s%.4f %s%d','X=',X,'i=',i) %输出结果
⑽ SOR迭代法 求MATLAB程序
迭代法 matlab实现代码如下
function [x,n] = jacobi(A,b,x0,eps,varargin)
if nargin ==3
eps = 1.0e-6;
M = 200;
elseif nargin<3
disp('输入参数数目不足3个');
return
elseif nargin ==5
M = varargin{1};
end
D = diag(diag(A)); %%求A的对角矩阵
L = -tril(A,-1); %%求A的下三角矩阵
U = -triu(A,1);%%求A的上三角矩阵
B = D(L+U);
f = D;
x = B*x0+f;
n = 1;%迭代次数
while norm(x-x0)>=eps
x0 = x;
x = B*x0+f
n = n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!')
return;
end
end
运行效果如下:
,A对称正定,且0<ω<2,则解Ax=b的SOR方法收敛。