我正在嘗試將此 Matlab 代碼轉換為 Scilab,但我遇到了一些問題。
clear all; clc;
c0 = 0.8;
c1 = 1.3;
c11 = -6.1;
c12 = -0.6;
c2 = 1.7;
c22 = -1.7;
g = 0.05;
d = 0.01;
x1 = -9;
x2 = 8;
k = 1;
kmax = 100;
x1trace = [x1];
x2trace = [x2];
i = 2;
while k < kmax
gr1 = c1 c12*x2 2*c11*x1;
x1 = x1 g*gr1
x1trace(i) = x1;
x2trace(i) = x2;
i = i 1;
gr2 = c2 c12*x1 2*c22*x2;
x2 = x2 g*gr2
x1trace(i) = x1;
x2trace(i) = x2;
i = i 1;
if sqrt(gr1^2 gr2^2) <= d;
break;
end
k = k 1;
end
x = -10:0.1:10;
y = -10:0.1:10;
[X, Y] = meshgrid(x, y);
Z = c0 c1*X c2*Y c12*X.*Y c11*X.^2 c22*Y.^2;
[C, h] = contour(X, Y, Z);
clabel(C, h);
hold on;
plot(x1trace, x2trace, '-');
text(x1trace(1) 0.2, x2trace(1) 0.5, 'M0');
text(x1 2, x2, ...
strvcat(['x1 = ' (num2str(x1))], ...
['x2 = ' (num2str(x2))], ...
['k = ' (num2str(k))]));
hold off;
我收到此行的錯誤:
[C, h] = 輪廓(X, Y, Z);
輸出引數的數量錯誤。
我應該改變什么來解決它?代碼中還有其他錯誤嗎?
uj5u.com熱心網友回復:
您應該使用以下 Scilab 代碼進行大致相同的渲染。Scilabcontour需要(在第四個引數中)水平曲線的數量或值本身。此外,您應該使用ndgrid代替meshgrid:
clear clc;
c0 = 0.8;
c1 = 1.3;
c11 = -6.1;
c12 = -0.6;
c2 = 1.7;
c22 = -1.7;
g = 0.05;
d = 0.01;
x1 = -9;
x2 = 8;
k = 1;
kmax = 100;
x1trace = [x1];
x2trace = [x2];
i = 2;
while k < kmax
gr1 = c1 c12*x2 2*c11*x1;
x1 = x1 g*gr1
x1trace(i) = x1;
x2trace(i) = x2;
i = i 1;
gr2 = c2 c12*x1 2*c22*x2;
x2 = x2 g*gr2
x1trace(i) = x1;
x2trace(i) = x2;
i = i 1;
if sqrt(gr1^2 gr2^2) <= d;
break;
end
k = k 1;
end
x = -10:0.1:10;
y = -10:0.1:10;
[X, Y] = ndgrid(x, y);
Z = c0 c1*X c2*Y c12*X.*Y c11*X.^2 c22*Y.^2;
clf
gcf.color_map=parulacolormap(8)($:-1:1,:)
contour(x, y, Z,0:-100:-700);
plot(x1trace, x2trace, '-');
xstring(x1trace(1) 0.2, x2trace(1) 0.5, 'M0');
xstring(x1 2, x2, ...
['x1 = ' string(x1)
'x2 = ' string(x2)
'k = ' string(k)]);

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481590.html
