1 はじめに
Matlab には方程式や方程式を解くための関数が多数あります。これらの関数の使い方が曖昧な人も多いかもしれません。ここでは、これらの関数の一般的な方向性を示し、基本的な使用シナリオを学ぶために簡単に紹介します。各関数の詳細や事例を知りたい場合は、Matlab 公式ヘルプ ドキュメントが最適な資料です。何千冊の本が偽って伝えられ、真実で伝えられるのは一件です。例を挙げて一緒に学びましょう、行きましょう~
2. 4つの機能
函数名字
4 つの機能には、と の2 つの概念が使用されますので函数句柄
、分けて説明します。いわゆる関数名とは、関数の変数名を一重引用符で囲んで文字列にしたもので、たとえばfunction f=func(x)
func.m に func() という関数を定義した場合、その関数名は となります'func'
。関数ハンドルについては、簡単に理解すると、関数ポインタを取得する@func
ために使用されます。匿名関数の結果は直接関数ハンドルです。たとえば、f=@(x)x^2+1
結果f
自体が関数ハンドルです。
2.1 ルート
root
この関数は、次のような多項式根探索問題を目的としています。
% 求解x^3-2*x^2+x+1=0;
p=[1,-2,1,1];
roots(p)
2.2 fゼロ
1 つの変数の非線形関数の根を見つけることをお勧めしますfzero
。
構文: x=fzero(f,x0)
、 はf
関数名または関数ハンドルです。関数名と関数ハンドルについては上記を参照してください。x0
ルートの初期推測値または推測範囲で、推測範囲の場合のx0
定義は[-1,1]
次のようになります。
% 案例一: 求解exp(x)+cos(x)=0
f=@(x)exp(x)+cos(x);
% 第一个参数是函数名字,或者函数句柄。第二个参数是其实猜测值或者猜测区间
fzero(f,0)
% 案例二:
% 在function.m中定义一个名为function的函数
fzero('function',0)
% 或者
fzero(@function,0)
% 都可以求出函数的根
2.3 fsolve
多変量/多次元の場合、非線形方程式の解法には次のものが使用されますfsolve
。
% 求解方程组 x^2+y-4=0, x-y-10=0
% 在test.m中定义如下函数
function r = test(x)
r(1)=x(1).^2+x(2)-4;
r(2)=x(1)-x(2)-10;
end
% 使用函数名或者函数句柄
fsolve('test',[0,0])
% 或者
fsolve(@test,[0,0])
2.4 解決する
関数という特別な存在もありsolve
、関数の根を求めたり方程式を解くこともでき、それ以上のことができ、最適化することもできます。関数根の探索や方程式の解法を実行する場合、対象となる関数がシンボリック関数またはシンボリック方程式である点で、上記の他の 3 つの関数とは大きく異なります。
syms x;
f = x^3+2*x^2-x+1;
s = solve(f); % f为符号函数,当不采用包含等式==的方程时,默认求根,否则求方程的解
double(s)
% solve的第一个参数是等式时
s = solve(x^3+2*x^2==x-1)
double(s) %结果同上
2.5 その他
上記の関数の根を求める場合、fzero
sumfsolve
関数などの初期推定値を指定する必要がある場合があります。そのため、まずは大まかに関数を描画して、おおよその解の範囲を把握するのが一般的ですが、描画関数の具体的な機能はおおよそ以下のとおりですので、気軽に試してみてください。
f = @(x,y) x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20;
g = @(x,y) x.*y/2+(x+2).^2+(y-2).^2/2-2;
% 隐函数绘制
fimplicit(g,'k')
axis([-6 0 -1 7])
hold on
% 等值线绘制
fcontour(f)
% 三维曲面绘制
figure;
fsurf(f)
要約する
これらの関数はよく似ていて、よく比較しないと混乱してしまいます。筆者も悩んでいたので、時間をかけて比較してみました。ご参考になれば幸いです。登録してログインしている方は、いいねやコメントをしていただけるとさらに嬉しいです!