我不明白爲何,在下面的示例中,僅X1變成1000列陣列而ý是單一的數。矢量在Matlab,不可理解的語法差異導致失敗
x = [0:1:999];
y = (7.5*(x))/(18000+(x));
x1 = exp(-((x)*8)/333);
任何澄清將不勝感激!
我不明白爲何,在下面的示例中,僅X1變成1000列陣列而ý是單一的數。矢量在Matlab,不可理解的語法差異導致失敗
x = [0:1:999];
y = (7.5*(x))/(18000+(x));
x1 = exp(-((x)*8)/333);
任何澄清將不勝感激!
爲什麼x1
1x1000
?
exp(X)
返回在數組X
每個元素的指數eˣ
。
由於x
是1x1000
,所以-(x*8)/333
是1x1000
,並且當在其上施加exp()
,所有1000種元素的指數被計算並且因此x1
也1x1000
。舉例來說,exp([1 2 3])
與[exp(1) exp(2) exp(3)]
相同。
爲什麼y
單號?
如果
A
是矩形m
-by-n
矩陣m~= n
,和B
是矩陣 與n
列,那麼x = B/A
返回的最小平方解等式x*A = B
的 系統。
在你的情況, A
是18000+x
size(18000+x)
和是1x1000
即m=1
和n=1000
,和m~=n
和B
是7.5*x
具有n=1000
列。
⇒(7.5*x)/(18000+x)
正在返回方程x*(18000+x) = 7.5*x
的最小二乘解。
結語:
x = [0:1:999];
支架是不必要在這裏,它最好是用這樣的:x=0:1:999 ;
看來你想要做逐元素計算部x1
您應該使用./
這樣的運算符:
y=(7.5*x)./(18000+x); %Also removed unnecessary brackets
還要注意,除了總是逐元素。 .+
不是一個有效的MATLAB語法(它可以在Octave中工作)。在MATLAB here中查看有效的算術數組和矩陣運算符。
3。 x1
也有一些不必要的括號。
儘量明確地指定要實現elementwise操作,而不是矩陣運算:
y = (7.5.*(x))./(18000+(x));
一般來說,.*
確實的elementwise乘法,./
確實的elementwise師等,所以[1 2] .* [3 4]
產生[3 8]
。忽略這些點會導致Matlab在使用矩陣運算時,只要它能夠將輸入合理地解釋爲矩陣。
實際上工作。所以我猜測結論是x1並不是完全正確的書寫,偶爾也會有作用。 – toxUP
'。+'不是MATLAB中的有效運算符。這個問題是關於MATLAB的問題,甚至沒有Octave標籤(如果你在Octave中試過) –
@SardarUsama我在MATLAB中運行這個,而不是Octave,它運行起來。但我同意這是不必要的。 https://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html(「由於加法和減法的矩陣和數組操作是相同的,因此字符對+和.-是不必要的「) –
謝謝你這樣一個完整的答案! – toxUP
完成。再次感謝。 – toxUP