数学实验这个玩意是真的很烦人……
秉承“长江后浪拍前浪,把前浪拍死在沙滩上”的精神。
特此把我自己写的数学实验报告的解题过程以博客形式记录下来,给未来的自己瞅瞅
仅供参考,不一定对!
请在独立思考之后再来看本篇博客。毕竟以后数学类研究是真的要用matlab的(虽然我估计那时候早就忘记怎么操作了,这也是为啥我要写这篇博客)
新旧版本的函数使用有一定区别!具体差异可以百度,或者直接使用和我一样的版本
matlab R2022a
注意:m有特殊要求,具体请查看你的实验报告
>> 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)
这里的e其实应该用exp(1)
来表示
>> syms x
>> f=exp(1)^(-m*x^2)
>> int(f,x,0,inf)
>> syms x
>> f=(m/1000)+x
>> f1=power(f,1/3)
>> taylor(f1,x,0,'Order',5)
>> pretty(ans)
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)
>> 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)
>> 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')
>> syms x y;
>> f=sin(x^2+(m/1000)*y^2)-cos(x*y);
>> ezplot('f',[-6,6,-8,8])
>> fmesh(@(x,y) m.*x.^2+y.^4);
画图代码,其中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~0
、0~2
、2~4
这3个范围
>>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
即收敛于那个值
第(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
结果出现下面这张图,代表函数是收敛的
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
结果是乱七八糟的,所以就是混沌的
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 |
我发现已经有学长分享了完整的实验报告,那我就不写了吧!
传送门
加油加油!