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中,一個函式有多個自變數,怎麼分別求...