MATLAB 编程题库
1.下面的数据表近似地满足函数,请适当变换成为线性最小二乘问题,编程求最好的系数,并在同一个图上画出所有数据和函数图像.
解:
x=[-0.931 -0.586 -0.362 -0.213 0.008 0.544 0.628 0.995]';
y=[0.356 0.606 0.687 0.802 0.823 0.801 0.718 0.625]';
A=[x ones<8,1> -x.^2.*y];
z=A\y;
a=z<1>; b=z<2>; c=z<3>;
xh=-1:0.1:1;
yh=<a.*xh+b>./<1+c.*xh.^2>;
plot<x,y,'r+',xh,yh,'b*'>
2.若在Matlab工作目录下已经有如下两个函数文件,写一个割线法程序,求出这两个函数精度为的近似根,并写出调用方式:
文件一 | 文件二 |
function v = f<x> v = x .* log<x> - 1; | function z = g<y> z = y.^5 + y - 1; |
解:
>> edit gexianfa.m
function [x iter]=gexianfa<f,x0,x1,tol>
iter=0;
while<norm<x1-x0>>tol>
iter=iter+1;
x=x1-feval<f,x1>.*<x1-x0>./<feval<f,x1>-feval<f,x0>>;
x0=x1;x1=x;
end
>> edit f.m
function v=f<x>
v=x.*log<x>-1;
>> edit g.m
function z=g<y>
z=y.^5+y-1;
>> [x1 iter1]=gexianfa<'f',1,3,1e-10>
x1 =
1.7632
iter1 =
6
>> [x2 iter2]=gexianfa<'g',0,1,1e-10>
x2 =
0.7549
iter2 =
8
3.使用GS迭代求解下述线性代数方程组:
解:
>> edit gsdiedai.m
function [x iter]=gsdiedai<A,x0,b,tol>
D=diag<diag<A>>;
L=D-tril<A>;
U=D-triu<A>;
iter=0;
x=x0;
while<<norm<b-A*x>./norm<b>>>tol>
iter=iter+1;
x0=x;
x=<D-L>\<U*x0+b>;
end
>> A=[5 2 1;-1 4 2;1 -3 10];
>> b=[-12 10 3]';
>>tol=1e-4;
>>x0=[0 0 0]';
>> [x iter]=gsdiedai<A,x0,b,tol>;
>>x
x =
-3.0910
1.2372
0.9802
>>iter
iter =
6
4.用四阶Range-kutta方法求解下述常微分方程初值问题〔取步长h=0.01
解:
>> edit ksf2.m
function v=ksf2<x,y>
v=y+exp<x>+x.*y;
>> a=1;b=2;h=0.01;
>> n=<b-a>./h;
>> x=[1:0.01:2];
>>y<1>=2;
>>fori=2:<n+1>
k1=h*ksf2<x<i-1>,y<i-1>>;
k2=h*ksf2<x<i-1>+0.5*h,y<i-1>+0.5*k1>;
k3=h*ksf2<x<i-1>+0.5*h,y<i-1>+0.5*k2>;
k4=h*ksf2<x<i-1>+h,y<i-1>+k3>;
y<i>=y<i-1>+<k1+2*k2+2*k3+k4>./6;
end
>>y
调用函数方法
>> edit Rangekutta.m
function [x y]=Rangekutta<f,a,b,h,y0>
x=[a:h:b];
n=<b-a>/h;
y<1>=y0;
fori=2:<n+1>
k1=h*<feval<f,x<i-1>,y<i-1>>>;
k2=h*<feval<f,x<i-1>+0.5*h,y<i-1>+0.5*k1>>;
k3=h*<feval<f,x<i-1>+0.5*h,y<i-1>+0.5*k2>>;
k4=h*<feval<f,x<i-1>+h,y<i-1>+k3>>;
y<i>=y<i-1>+<k1+2*k2+2*k3+k4>./6;
end
>> [x y]=Rangekutta<'ksf2',1,2,0.01,2>;
>>y
5.取,请编写Matlab程序,分别用欧拉方法、改进欧拉方法在上求解初值问题。
解:
>> edit Euler.m
function [x y]=Euler<f,a,b,h,y0>
x=[a:h:b];
n=<b-a>./h;
y<1>=y0;
fori=2:<n+1>
y<i>=y<i-1>+h*feval<f,x<i-1>,y<i-1>>;
end
>> edit gaijinEuler.m
function[x y]=gaijinEuler<f,a,b,h,y0>
x=[a:h:b];
n=<b-a>./h;
y<1>=y0;
fori=2:<n+1>
y1=y<i-1>+h*feval<f,x<i-1>,y<i-1>>;
y2=y<i-1>+h*feval<f,x<i>,y1>;
y<i>=<y1+y2>./2;
end
>> edit ksf3.m
function v=ksf3<x,y>
v=x.^3-y./x;
>>[x y]=Euler<'ksf3',1,2,0.2,0.4>
x =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
y =
0.4000 0.5200 0.7789 1.2165 1.8836 2.8407
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论