南京邮电大学matlab数学实验报告

前言

数学实验这个玩意是真的很烦人……

秉承“长江后浪拍前浪,把前浪拍死在沙滩上”的精神。

特此把我自己写的数学实验报告的解题过程以博客形式记录下来,给未来的自己瞅瞅

仅供参考,不一定对!

请在独立思考之后再来看本篇博客。毕竟以后数学类研究是真的要用matlab的(虽然我估计那时候早就忘记怎么操作了,这也是为啥我要写这篇博客)

新旧版本的函数使用有一定区别!具体差异可以百度,或者直接使用和我一样的版本

  • 本篇博客用的版本是matlab R2022a

练习一

注意:m有特殊要求,具体请查看你的实验报告

1.1

IMG_20220408_105804

>> syms x
>> limit((sqrt(1+m*x^2)-cos(m*x))/x^2,x,0)

注意范围不同,第一个是0,第二个是趋近于∞

syms x
limit((sqrt(1+m*x^2)-cos(m*x))/x,x,inf)

1.2

IMG_20220408_105843

这里的e其实应该用exp(1)来表示

image-20220408111613808

1.3

IMG_20220408_110021

>> syms x
>> f=exp(1)^(-m*x^2)
>> int(f,x,0,inf)

1.4

image-20220408111132874

>> syms x
>> f=(m/1000)+x
>> f1=power(f,1/3)
>> taylor(f1,x,0,'Order',5)
>> pretty(ans)

1.5

image-20220408111501248

image-20220408112657933

1.6

image-20220408111933112

image-20220408112608184

1.7

IMG_20220408_105940

M文件

function f=func1(x)
f=x.*2.*(x>=0&x<=1/2)+(2*(1-x)).*(x>=1/2&x<=1);
end

画图命令

 >> x=linspace(0,1);
 >> y=func1(x);
 >> plot(x,y);

第(2)题不做要求

1.8

image-20220408112244059

(1)
>> t=-m/10:0.1:m/10;
>> x=(m/20)*cos(t);
>> y=(m/20)*sin(t);
>> z=t;
>> plot3(x,y,z)

(2)
>> t=-m/10:0.1:m/10;
>> x=cos(t)+t.*sin(t);
>> y=sin(t)-t.*cos(t);
>> z=-t;
>> plot3(x,y,z)

1.9

IMG_20220408_110036

>> a=[1000/m,500/m,400/m,100/m];
col=['r','b','k','g'];
x=linspace(-0.1,1,1000);
for i=1:4
y=0.*(x<=0)+(a(i)*exp(-a(i)*x)).*(x>0);
plot(x,y,'color',col(i),'linewidth',1)
hold on;
end
>> legend('1000','500','400','100')

1.10

IMG_20220408_113906

>> syms x y;
>> f=sin(x^2+(m/1000)*y^2)-cos(x*y);
>> ezplot('f',[-6,6,-8,8])

1.11

IMG_20220408_113925

>> fmesh(@(x,y) m.*x.^2+y.^4);

1.12

image-20220408151851822

画图代码,其中grid on;是给画出的图打网格

fplot(@(x) exp(x)-((3*m)/(m+100))*x.^2);
grid on;

近似求根命令(fsolve或者fzero)

f=@(x) exp(x)-((3*m)/(m+100))*x.^2;
x=[-1 0 2 4];
arrayfun(@(x) fzero(f,x),x)

其中x的范围是看图得出的,零点范围在-1~00~22~4这3个范围

image-20220408152113871


练习二

2.1

IMG_20220408_113826

>>f=inline('(x+m/x)/2');
x0=-3;
for i=1:10;
x0=f(x0);
fprintf('%g,%12.8f\n',i,x0)
end;

更改x0的值得到另外一个结果,数字相同,符号不同

最后打印出的结果相同,Xn即收敛于那个值

2.2

IMG_20220408_113830

第(1)题

>> f=inline('(x-1)/(x+m)');
>> x0=1;
>> for i=1:10;
x0=f(x0);
fprintf('%g,%12.8f\n',i,x0);
end;

第(2)题

因为用蜘蛛网图判断迭代序列的时候,需要用到x的范围,此时需要用题(1)的函数对f2(x)进行计算,最终写的x的范围要包含算出的f2(x)收敛值

如计算出的收敛值是316.2343564,最后写的范围可以是[250,350]

>>  f=inline('(x+m*m)/(x+m)');
x=[];
y=[];
x(1)=0.5;
y(1)=0;
x(2)=x(1);
y(2)=f(x(1));
for i=1:100
x(1+2*i)=y(2*i);
x(2+2*i)=x(1+2*i);
y(1+2*i)=x(1+2*i);
y(2+2*i)=f(x(2+2*i));
end;
plot(x,y,'r')
hold on
syms x;
ezplot(x,[250,500]);
ezplot(f(x),[250,500]);
axis([250,500,250,500]);
hold off

结果出现下面这张图,代表函数是收敛的

image-20220408160134776

2.3

IMG_20220408_113837

M文件

function y=func2(x)
if x>=0&&x<=1/2
    y=2*x;
elseif x>=1/2&&x<=1
    y=2*(1-x);
end

命令行代码

x(1)=rand();
for i=1:20
x(1)=func2(x(1))
fprintf('%g,%g\n',i,x(1));
end

结果是乱七八糟的,所以就是混沌的

2.4

IMG_20220408_161530

f=inline('a*x*(1-x)');
x0=0.5;
for i=1:100
plot(i,f(x0),'.')
x0=f(x0);
hold on
end

内联函数中的a要用具体值替代,否则会报错

α 2.8 3.4 3.6 3.84
序列收敛情况 收敛 T=2 混沌 T=3

咕咕咕咕

我发现已经有学长分享了完整的实验报告,那我就不写了吧!

传送门

image-20220409131504284

加油加油!

猜你喜欢

转载自blog.csdn.net/muxuen/article/details/124042753