急!!這個Matlab函式為什麼執行時前半部分全是0,而後半部分才能出結果啊

2022-06-05 12:15:11 字數 1725 閱讀 6314

1樓:匿名使用者

原因:你原來的if巢狀寫法雖然不可取,但基本上還是可行的。問題出現在倒數第二個if分支:

fee=60;

其中變數fee少了下標(i,j)。這樣的後果是,一旦執行到這個分支,就會把變數fee給賦值成為一個標量60。如果後續x還有其他元素,則執行其它分支時會把fee自動擴充套件為相應大小的矩陣(前面用zeros對fee進行預置也白做了),如果剛好是對x的最後一個元素執行此分支,則結果就會返回一個標量。

建議:其實整個函式改寫成下面這樣幾行就夠了:

function fee = fee1( x )

fee = zeros( size(x) );

x0 = [0 300:50:500 600:100:1000];

y0 = [20 24:2:28 32 36 45:5:60];

for ii = 1 : length(x0) - 1

fee( x>x0(ii) & x<=x0(ii+1) ) = y0(ii);

endif max(x(:)) > 1000

fee( x>x0(end) ) = ( x(x>x0(end)) - 1000 ) / 20 + 60;end

2樓:

建議你這麼寫:

fee=zeros(size(x));

fee(x>0&x<=300) = 20;

fee(x>300&x<=350) = 24;

... % 諸如此類

fee(x>1000) = (x(x>1000)-1000)/20+60;

然後你就可以一句一句地檢視每個區間的執**況了。

matlab中這個簡單的函式為什麼執行不出呢???

3樓:韓得雄

你好 你要注意matlab是基於矩陣的運算你可能疏忽了 ,這裡應該有點乘 .

把 y=(0.52+0.002599*x^2)/(1-000718*x^2);

改成:y=(0.52+0.002599*x.^2)./(1-000718*x.^2);

就可以了 :請以後注意,如果你是要做點乘運算 要加. 表示是數的運算否則 ,就是矩陣的運算了

你直接這樣算 ,是報矩陣位數不對 或者超出的錯誤要注意細節

4樓:南冥飛鳥

改成:x=[5:10:30];

y=(0.52+0.002599*x.^2)./(1-000718*x.^2);

plot(x,y);

即可。對於陣列間的乘除和冪,都要在相應的運算子號前加個 . (如*改成 .*)才行,表示陣列的元素一一對應的進行運算。

5樓:

把" ^,*,/ "前面都加上點".^ .* ./"

為什麼我的matlab程式可以輸出所有計算值? 求只輸出最後結果的方法。

6樓:理工小彭

在不需要值輸出的語句後面加一個分號就行了,在程式設計時要習慣於加分號。

7樓:牛得天下

那是因為你這些變數或者常量後面沒加封號「;」。

你加了就不顯示了

比如說要這樣:

h=(b-a)/n;

i=1;

x=a+h;

y=x^2*h;

8樓:匿名使用者

那是因為你這些變數或者常量後面沒加封號「;」。

請問怎麼用matlab畫這個函式的幅頻特性曲線和相頻特性曲線

如下參考 2.給出控制元件頂點的xy座標內,如下圖所示容。3.定義引數t的點列,定義xx和yy為0,分別求儲存和計算得到的bezier曲線對應的x座標和y座標的極板值。4.計算對應點列中bezier曲線的值。根據貝塞爾曲線公式。5.繪製貝塞爾曲線,相應的控制多邊形和控制頂點。6.繪製的函式圖如下圖所...

為什麼這個式子sin是偶函式,為什麼cos的不是偶函式,sin的是偶函式?

這個不是偶函式吧,比如x等於 6和 6時的值是不等的,所以不是偶函式,當然也不是奇函式,x等於0是函式值不為0。之所以sinx是奇函式而那個函式不是,是因為那個函式是在sinx上做了平移縮放,與sinx已經不是同一個函式了。這個是非奇非偶函式,搞錯了 為什麼cos的不是偶函式,sin的是偶函式?簡單...

matlab中的sim函式的返回值是什麼

sim命令能是使用者在matlab命令視窗或者是m檔案中執行有simulink建立的模型。這是 的命令內。我也是剛剛接觸 容simulink 正在學習當中。simulink命令有三種呼叫格式 t,x,y sim modelname 利用對話方塊引數進行 返回輸出矩陣。t,x,y sim model ...