matlab變數無法累加,我是matlab初學者,什麼時候要在變數後邊加點

2021-12-19 16:51:50 字數 4141 閱讀 5498

1樓:匿名使用者

您遇到的問題很基礎很普遍。

(1)為什麼sum不能累加到大於255?

sum在定義的時候預設是double型的,但是由於你的m檔案裡的這句:

sum=sum+i(j+direction(k,2),i+direction(k,1))

導致sum型別退化為了uint8型,而uint8是unsigned int 8bits的簡寫,學過二進位制就會明白這種型別表示的範圍為0-255,這就是為什麼sum值不能累加到大於255的原因。

(2)為什麼sum型別會退化為uint8?

這是由於讀入影象後得到的矩陣是unit8的(灰度影象,所以使用uint8剛好表示了0-255所有灰度級),這是使用你的程式得到的workspace下的變數型別:

>>whos

name size bytes class attributes

i 570x760 433200 uint8

i1 570x760 3465600 double

count 1x1 8 double

direction 8x2 128 double

h 1x1 8 double

i 1x1 8 double

j 1x1 8 double

k 1x1 8 double

sum 1x1 1 uint8【注意】

w 1x1 8 double

(3)問題解決

讀入影象之後進行強制轉化為double:

i=double(i);

即可解決問題。

ps:二樓正解,樓主沒看明白而已。

(4)你以後可能遇到的問題**

根據你的問題,**你以後肯定會遇到這個問題:

處理之後的影象通過inshow()函式顯示時,影象異常。

這也是跟變數型別有關的,拿你最終輸出的i1來說,要進行正常顯示需要進行強制轉化:

imshow(uint8(i1));

ps:一樓正解,樓主沒看懂而已

2樓:緱益康學民

一維陣列的話直接sum(b)

二維陣列要疊加所有元素用sum(b(:))要疊加行或列用sum(b,1)或sum(b,2)----------------

∑∑bibj這一項,如果b是行向量的話可以用sum(sum(b'*b))

或者bb=b'*b;sum(b(:))

列向量的話吧b'*b換成b*b'

3樓:匿名使用者

i(j+direction(k,2),i+direction(k,1))

首先這個在加到sum前不等於0

還有就是是輸入

whos sum

檢視sum的資料型別是不是int

%sum=sum+2

前面帶有百分號,屬於comment,不會被執行的!

改為sum=sum+2

4樓:匿名使用者

sum=sum+uint32(i(j+direction(k,2),i+direction(k,1)))

或sum=sum+double(i(j+direction(k,2),i+direction(k,1)))

matlab定義多個符號變數

5樓:匿名使用者

% 用一個迴圈即可實現多變數定義

for i=1:100

syms (['x',num2str(i)]);

end%如果我們不會太多的mantlab功能,那我們%就運用我們所知道的去完成那些我們未知的

%功能,這樣也可不必被軟體約束和限制。

matlab中怎麼定義一個變數為短整形或者其他型別的呢 50

6樓:匿名使用者

對於樓上所說的

「對於矩陣,如想要int8型,如下:

c=zeros(500,500);

c=int8(c);

」最好寫成c=zeros(500,500,'int8'); ,這樣一次到位,避免變數過大提示記憶體不足

7樓:匿名使用者

舉例說明:想讓c為int8型,可以如下:

c=0;

c=int8(c);

對於矩陣,如想要int8型,如下:

c=zeros(500,500);

c=int8(c);

即先給變數賦值為0,1,或某個值。然後強制型別轉換。

也可以c = zeros(500,500,'int8');

或許,你自己早就解決了(寫完看到時間2008),算是給其他人用也行。

我是matlab初學者,什麼時候要在變數後邊加點

8樓:匿名使用者

^1、在求函式值的

抄時候,並且是給襲出一組自變bai量的值,求與之對應的因du變數的值zhi

例:x=[1 2 3 4 5 6];

函式式為:y=2*x+x^2;

這時,你dao在matlab裡編寫函式式的時候就要寫成:y=2.*x+x.^2

你可以在命令視窗輸入,也可以寫入m檔案

2、矩陣的點乘

例:a=[1 2 3;4 5 6],b=[7 8 9;4 5 6]注意:a和b的行數和列數都要相等

矩陣的點乘,就是對應位置的元素相乘,構成另一個矩陣的元素a.*b=[7 16 27;16 25 36]

9樓:匿名使用者

點乘,舉個例子你就知道了

[1 2 3]*[10 10 10]' = 10 + 20 + 30 = 60;

[1 2 3].*[10 10 10] = [10 20 30]

10樓:高等數學答案

你是不是想說運算子號加點?變數是陣列或者矩陣的時候。

matlab中變數右下加點是什麼意思?

11樓:導超

加點的意

思就是對應元素做對應的運算的意思。

例如;a=[1,2,3,4,5];

b=[1,2,3,4,5];

那麼,a.*b=[1*1,2*2,3*3,4*4,5*5]=[1,4,9,16,25]

用matlab給你驗證一下:

>> a=1:5;

>> b=a;

>> a.*b

ans =

1 4 9 16 25>>

當然,還有./ .* .^2 等等, 這些的意思都是一樣的。

matlab 如何用syms定義整數變數

12樓:一點設計演示

情況一:符號變數

必須要定義,定義之後才可以使用。如下面的例子,未定義就會出錯。

符號變數定義方法例如: sym x 或者 syms x ,兩者有區別也有共同點。

情況二:計算過程當中的儲存數值的變數

可以不必定義,隨時需要,隨時定義,但是有時候如果變數很多,那麼最好提前宣告,宣告的時候,可以直接賦予0值,並且註釋,這樣方便以後區分,避免混淆。

情況三:矩陣和向量

對於矩陣一般都是需要定義的,定義好矩陣之後,才方便訪問/修改矩陣的指定元素,矩陣宣告(定義)的方法,常用的 就是宣告為零矩陣zeros(m,n),或者單位矩陣ones(m,n),eye(m,n)等。

13樓:匿名使用者

很遺憾,matlab 無法定義整數變數!

14樓:光源光華公子

n=ceil(n) 或者n=floor(n)

matlab含變數的矩陣相乘,matlab怎麼讓兩個矩陣內的元素對應相乘

syms x y a b c a 1 x 3 2 y 2 b 1 3 1 4 c a b 這樣就可以執行了 a x,y 1 x,3 2,y 2 b 1,3 1,4 c x,y a x,y b matlab怎麼讓兩個矩陣內的元素對應相乘?例 copya 1 2 3 4 b 5 6 7 8 得到一bai...

matlab怎麼表示含參變數的積分

一個確定的函式f x 在 0,a 對x的積分是吧?假設你的a也是一個符號變數。那麼 syms x a 定義符號變數a和x fx f x 輸入你想要的函式 ga int fx,0,a 把f x 在 0,a 區間的積分賦給g a 應該可以了吧 在matlab中怎樣求帶有引數的定積分 1 首先,如果要對q...

matlab裡有多個自變數怎麼辦

用matlab處理有多個自變數的問題,可以這樣來處理,將多個自變數看成一個變數向量組。例專如 下列 屬方程f x,y,z x 3 y 2 z 4可以這樣來寫 y x 1 3 x 2 2 x 3 4這樣問題,就變成了二元幾次方程 自變數x,因變數y 了。matlab中,一個函式有多個自變數,怎麼分別求...