序文
数学的実験は本当に迷惑です...
「揚子江の後ろの波が前の波を打ち負かし、前の波が浜辺で打ち負かされる」という精神に固執する。
私は、将来の自分のために、自分で書いた数学実験レポートの問題解決プロセスをブログの形で記録します。
参考までに、必ずしも正しいとは限りません。
自分で考えてからこのブログに来てください。結局のところ、将来的には、数学の研究では実際にmatlabを使用するようになります(当時は操作方法を忘れていたと思いますが、このブログを書いたのはそのためです)
新旧バージョンの機能使い方には一定の違いがあります!具体的な違いはBaiduである場合もあれば、私のものと同じバージョンを直接使用する場合もあります。
- このブログで使用されているバージョンは
matlab R2022a
練習する
注:mには特別な要件があります。詳細については、実験レポートを確認してください
1.1
>> syms x
>> limit((sqrt(1+m*x^2)-cos(m*x))/x^2,x,0)
範囲が異なり、最初は0、2番目は∞に近いことに注意してください。
syms x
limit((sqrt(1+m*x^2)-cos(m*x))/x,x,inf)
1.2
ここでのeは、実際に示すためにexp(1)
使用するます
1.3
>> syms x
>> f=exp(1)^(-m*x^2)
>> int(f,x,0,inf)
1.4
>> syms x
>> f=(m/1000)+x
>> f1=power(f,1/3)
>> taylor(f1,x,0,'Order',5)
>> pretty(ans)
1.5
1.6
1.7
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
(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
>> 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
>> syms x y;
>> f=sin(x^2+(m/1000)*y^2)-cos(x*y);
>> ezplot('f',[-6,6,-8,8])
1.11
>> fmesh(@(x,y) m.*x.^2+y.^4);
1.12
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
の3つの範囲に0~2
あります。2~4
演習2
2.1
>>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
質問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
その結果、次の図が表示され、関数が収束していることが示されます。
2.3
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
f=inline('a*x*(1-x)');
x0=0.5;
for i=1:100
plot(i,f(x0),'.')
x0=f(x0);
hold on
end
インライン関数のaは特定の値に置き換える必要があります。そうしないと、エラーが報告されます。
a | 2.8 | 3.43.4 | 3.6 | 3.84 |
---|---|---|---|---|
シーケンス収束 | 収束 | T = 2 | 混沌 | T = 3 |
カッコウカッコウ
一部の先輩がすでに完全な実験報告書を共有していることがわかったので、私はそれを書きません!
さあさあ!