【问题标题】:swapping two vector's elements in matlab在matlab中交换两个向量的元素
【发布时间】:2014-11-15 20:25:02
【问题描述】:

我有两个向量,v1 (1x9)v2 (1x4)

我必须编写一个有两个输入的函数,(x,y)out 的输出。

x 应该是v1 中的索引号x

y 应该是v2 中的索引号y

该函数应将v2 中的xth 元素替换为v1 中的yth 元素,并将新的v2 作为输出。

举个例子:

v1=[1 2 3 4 5 6 7 8 9];
v2=[1 2 3 4];
out = myfun(7,2);

那么输出应该是

out = [1 7 3 4];

下次如果x=9y=1

out = myfun(9,1);
out = [9 7 3 4];

我的主要程序想法是

[M Z]=测试(A,q) A 是矩阵 (mxn) q 是长度为 m 的向量 i=[1:m];j=[1:n]; c(:,j)=q./A(:,j); 在 c 中找到最小元素。例如它是 c(I,j) 然后 x=我;和 y=j;g i = [1:x-1,x+1:m]; j = [1:y-1,y+1:n]; % 开始新的计算 语句...计算过程以找到矩阵 M 而不是 A 和向量 Z 而不是 q。

程序结束

现在我想编写你之前在这个程序中所做的 myfunction

   elseif v(x) <= v1(n)  this program must working continuously (holding M and Z as new A and q in input and get the minimum ratio and so the new x and y ) until   v(x)==n break  

请帮忙

【问题讨论】:

  • v2(y) = v1(x); 不是你想要的?

标签: arrays matlab function


【解决方案1】:

您可以在下次调用时save 变量和load 它。

function v2 = myfun(x,y)
v1=[1 2 3 4 5 6 7 8 9]; 
v2=[1 2 3 4];
if exist('v2.mat', 'file' ) ~= 0
   load('v2')
end
v2(y) = v1(x);
save('v2','v2');
end

你也可以使用persistant variable

function out = myfun(x,y)
persistent v
if isempty(v)
   v = [1 2 3 4];
end
v1=[1 2 3 4 5 6 7 8 9];
v(y) = v1(x);
out = v;
end

注意

mlock 命令 将当前正在运行的函数锁定在内存中,以便后续的清除函数不会将其删除。将函数锁定在内存中还可以防止文件中定义的任何持久变量被重新初始化。

编辑

我从你的 cmets 收到了这张表格,看看情况如何,

function out = test(x,y) 
persistent v 
if isempty(v) 
   v = [1 2 3 4]; 
end
v1 = [1 2 3 4 5 6 7 8 9];
v(y) = v1(x);
if x == 3;
   out = v;
   return 
elseif v(y) <= v1(9)
   statements 
end
out = v;
end

【讨论】:

  • kamtal ,,我编辑了我的问题,我需要你看到它,和帮助
  • @osman 请提出一个新问题,输入您已有的代码并询问您要做什么。所以其他人也可以提供帮助。它变得非常混乱。使用 `` 输入代码,这样它就可以阅读了。谢谢,
  • 嗨;我在这一行有问题 i = [1:x-1,x+1:m];j = [1:en-1,en+1:n];警告:警告:冒号操作数必须是实数标量。这是什么意思请帮忙
  • 好的;但是如果我有 x=3 和 en=6 和 m=4 和 n=9 那么这个警告出现在这一行 i = [1:x-1,x+1:m]; j = [1:en-1,en+1:n];为什么??
  • @osman,不会报错,i=[1:2,4:4]; j=[1:5,7:9]。你可以试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
相关资源
最近更新 更多