MATLAB中数字的负数

时间:2014-11-07 16:59:46

标签: algorithm matlab loops

我必须在MATLAB中创建一个函数,当输入时,输出将是该数字的负数。 我写的代码:

function [p] = negative(q)
% given an input , output will be negative of that input

w = subtract(0,1) ; 
[p] = multiply(q,w) ;
end

我为函数减法编写的代码是:

function [m] = subtract(n,s)
m = n ;
while s
[m]= decrement(m) ;
s = decrement(s) ;
end
end

乘法代码是:

function [a] = multiply(x,y)
a = x ;
y = decrement(y) ;
while y
[a]= addition(a,x);
y = decrement(y);
end
end

添加功能:

 function [a] = addition(b,c)
 % adds b and c 
 a = b ;
 while c
 [a] = increment(a) ; 
  c = decrement(c) ;
 end
 end

功能增量代码:

 function out = increment(in)
 out = in + 1;
 end

功能减量如下:

function out = decrement(in)
 out = in - 1;
end

我为函数底写的代码应该按照我的方式工作,因为我将输入乘以-1。但是在MATLAB命令窗口中,当我写入负数(输入)时,没有打印出任何内容(除了w = -1)。为什么会这样,我该如何解决? 我不允许使用任何操作,包括(+, - ,*,/,<,>,==),我也不允许使用for循环。 我唯一能用的就是赋值(=)和while循环。

2 个答案:

答案 0 :(得分:2)

首先,我不明白为什么你要为一行问题编写50行代码。 out = -1 .* input;

但是,你的问题在于:

function [a] = multiply(x,y)
a = x ;
y = decrement(y) ; % --------------!!!
while y
[a]= addition(a,x);
y = decrement(y);  % --------------!!!
end
end

当y为负数时,循环会不断递减,因此它永远不会离开循环。

每当您输入负数(Q)的正数Q时,

y将为负。

答案 1 :(得分:1)

如前所述,additionsubtractmultiply存在一些问题,所以我试图避免使用它们。

试试这个,

function [p] = negative(q)
a = q;
b = q;
a = increment(a);
b = decrement(b);
while b && a
    a = decrement(a);
    b = increment(b);
end
while a
    q = increment(q);
    a = increment(a);
end
while b
    q = decrement(q);
    b = decrement(b);
end
p = q;
end

我们的想法是定义两个变量,a,bq相同,然后增加一个,同时减少另一个,

所以在第一个循环之后,ab中的一个将是0而另一个将是2xq(没有无限循环!)。

然后我们可以轻松使用另一个循环来获取-q,因为我们有2xq

似乎运作良好。