Matlab- input arguments of type 'double' ????

标签:
matlabit |
分类: Matlab(VC) |
???Error using ==>feval
Undefined function or method 'rad03' for input arguments of type 'double'.
The error message means that Matlab can not find the file rad03.m (assuming the function rad03 is located in a file with the same name).
Could it be that you are not in the right directory?
yes it could, thanks!
解决方案:
M文件命名不正确会产生一些莫名其妙的error信息,对于初学者来说更是如此,例如Undefined function or method for input arguments of type 'char'(点击查看相应链接)便是一 例。下面稍微总结了一些[1][2]:
1,M文件名首字符不能是数字或下划线,一定为英文字符。ps:见规则(4)
2,M文件名不能与Matlab的内部函数名相同。M文件名的命名尽量不要是简单的英文单 词,最好是由大小写英文/数字/下划线等组成。原因是简单的单词命名容易与Matlab内部函数同名。
3,M文件名中不能有空格。若需要用两个或以上单词组合作为文件名,各单词必须直接连接组合 (可把每个单词首字母大写以作区分或使用下划线)。例如“start plot”作为文件名就会报错,改用“StartPlot”或者“start_plot”为文件名,程序就能正常运行。ps:规则(4)讲函数名为任意的 字母、数字和下划线的组合,而没有包括“空格”。
4,文件存储路径一定为英文
2.1原程序中得数据保存在 wbarb文件里面了
如果你需要修改应该把 load wbarb; 改为
开始:
clear all;
load wbarb;
I = ind2gray(X,map);imshow(I);
I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);
[N,M] = size(I);
h = [0.125,0.375,0.375,0.125];
g = [0.5,-0.5];
delta = [1,0,0];
J = 3;
a(1:N,1:M,1,1:J+1) = 0;
dx(1:N,1:M,1,1:J+1) = 0;
dy(1:N,1:M,1,1:J+1) = 0;
d(1:N,1:M,1,1:J+1) = 0;
a(:,:,1,1) = conv2(h,h,I,'same');
dx(:,:,1,1) = conv2(delta,g,I,'same');
dy(:,:,1,1) = conv2(g,delta,I,'same');
x = dx(:,:,1,1);
y = dy(:,:,1,1);
d(:,:,1,1) = sqrt(x.^2+y.^2);
I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0
1]);figure;imshow(I1);
lh = length(h);
lg = length(g);
for j = 1:J+1
lhj = 2^j*(lh-1)+1;
lgj = 2^j*(lg-1)+1;
hj(1:lhj)=0;
gj(1:lgj)=0;
for n = 1:lh
hj(2^j*(n-1)+1)=h(n);
end
for n = 1:lg
gj(2^j*(n-1)+1)=g(n);
end
a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same');
dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same');
dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same');
x = dx(:,:,1,j+1);
y = dy(:,:,1,j+1);
dj(:,:,1,j+1) = sqrt(x.^2+y.^2);
I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0
1]);figure;imshow(I1);
end
3.sprintf() 格式化输出函数(图形)
sprintf() 格式化输出函数(图形)
功能: 函数sprintf()用来作格式化的输出。
用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);
说明: 函数sprintf()的用法和printf()函数一样,只是sprintf() 函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不 定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。
函数名: sprintf
功 能: 送格式化输出到字符串中
用 法: int sprintf(char *string, char *farmat [,argument,...]);
程序例:
#include <stdio.h>
#include <math.h>
int main(void)
{
}
sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一
个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程 序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。
http://blog.csdn.net/images/authorship.gif sprintf,你知道多少?
选自《CSDN 社区电子杂志——C/C++杂志》
http://emag.csdn.net2005 年1 月 总第1 期 - 93 -
本文作者:steedhorse(晨星)
printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说
起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多
吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。
由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,
后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。所以本文着重介绍sprintf,有时
也穿插着用用pritnf。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
格式化字符串上。
printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的
格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终
函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
格式化数字字符串
sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代
itoa。如:
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一
种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。
4.Subscript indices must either be real positive integers or logicals.
Subscript indices must either be real
positive integers or logicals
中文解释:下标索引必须是正整数类型或者逻辑类型
出错原 因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab
的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。
另, 我运行上述两句时是正确的,且得到了结果。
>> p=[1 -8 6 -30];
>> r=roots(p)
r =
5,numel,size
size:获取数组的行数和列数
length:数组长度(即行数或列数中的较大值)
numel:元素总数。
s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。
[r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。
如果在size函数的输入参数中再添加一项,并用1或2为该项赋值,则size将返回数组的行数或列数。 其中r=size(A,1)该语句返回的时数组A的行数, c=size(A,2) 该语句返回的时数组A的列数。
n=numel(A)该语句返回数组中元素的总数。
n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数 组,则返回0;如果A是一个向量则返回A的长度。
n=max(size(A):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。