2

この関数を使用して、matlab を使用した最小二乗法でこのデータをy=(a*x)./(b+x)近似 するにはどうすればよいですか?x = [1.5 4 5 8 12 16 17]y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4]

対数を使って を得log(y)=log(a*x)-log(b+x)た. 結果は、y = a*x + b必要な形ではありません。a本来あるべきように乗算xされていませんが、加算されているためlog(y)=log(a)+log(x)-log(b)です。だから私は次に何をすべきかわかりません。y=b*x.^aとを実行するコードは知っていますがy=b*exp.(x*a)、これを解決する方法がわかりません。

4

1 に答える 1

3

ええと、代数 1 に戻る時が来たと思います。log(b+x) は log(b) と同じではありません。少なくとも試したように、ログを使用してこれを解決することはできません。

エラー構造を使って素早くルーズにプレイする意思がある限り (たとえそれが何を意味するのかわからなくても、それは重要な場合があります)、物事を逆転させると思いますか?

1/y = (b+x)/(ax) = b/(ax) + 1/a

問題を変換して、

c = b/a
d = 1/a
u = 1/x
v = 1/y

今、私たちは持っています

v = cu + d

この線形回帰問題を解き、c と d から a と b を復元します。

MATLAB では、単純です。

x = [1.5 4 5 8 12 16 17];
y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4];

u = 1./x;
c_d = polyfit(u,1./y,1)
c = c_d(1);
d = c_d(2);

a = 1./d
a =
          3.90554889035516

b = c*a
b =
          2.19394529536478

そして、あてはめの結果をプロットします。

ezplot(@(x) a.*x./(b+x),[1.5 17])
hold on
plot(x,y,'ro')

ここに画像の説明を入力

于 2013-01-28T04:22:21.090 に答える