簡體   English   中英

在Matlab中使用求解功能

[英]Using the solve function in Matlab

我需要在Matlab中求解非線性方程。 請查看代碼以獲取詳細信息。

sigma = .25;
beta = 2;
alpha = .1;
eta = .025;

syms x

phi = sqrt(2.*sigma.^2 + beta.^2);
kappa = (beta + phi)./(beta - phi);

w = .5;

D is imported data;

A = @(t) exp((alpha*(beta+phi).*t)./sigma.^2).*...
    ((1-kappa)./(1-kappa.*exp(phi.*t))).^(2.*alpha./sigma.^2);

B = @(t) (beta - phi)./sigma.^2 + 2.*phi./(sigma.^2.*(1-kappa.*exp(phi.*t)));

C = @(t) exp(eta^2.*t^3/6);

G = @(t) (alpha./phi).*(exp(phi.*t)-1).*exp(alpha.*(beta+phi).*t./sigma^2).*...
    ((1-kappa)./(1-kappa.*exp(phi.*t))).^((2.*alpha./sigma^2) + 1);

H = @(t) exp((alpha.*(beta+phi) + phi.*sigma^2)./sigma^2).*...
   ((1-kappa)./(1-kappa.*exp(phi.*t))).^((2.*alpha./sigma^2) + 2);

spread_prot_portion = @(i,j,t) exp(B(t).*x).*D(i,j).*(G(t) + H(t).*x);
spread_fee_portion  = @(i,j,t) A(t).*exp(B(t).*x).*D(i,j);

t = (.5:.5:10);
j = (1 :1 :20);
k = 1:20


solve('cds(1)- w*sum(spread_prot_portion(1,j(k),t(k)))/sum(spread_fee_portion(1,j(k),t(k))) = 0')

請注意,cds已加載數據。 我需要解決x。 這就是為什么它是syms中唯一的變量,並且給出了所有其他變量的原因。 不幸的是,我不能只寫一個表達式。 一些幫助將不勝感激

對於這種情況,您需要使用for循環來查找總和。 假設

syms x;
f = @(i, j) i + j + x;

然后對ij所有索引求和

total = 0;
for i = 1:10
  for j = 1:10
    total = total + f(i, j);
  end
end
display(total) %// total = 100*x + 1100

然后要解決total = 100請寫(注意沒有撇號)

xSol = solve(total - 100);

但是請注意,您正在嘗試找到一個非常困難的問題的確切解決方案。 最好將fsolve與

xSol = fsolve(@fun, estimateOfx);

其中有趣的是針對x的特定值計算f(i,j)和的x ,即

function total = fun(x)
f = @(i, j) i + j + x;
%// Find total as above
end

這里是解釋一個例子fsolve多一點點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM