我正在制作一个获取用户输入以帮助解决静态问题的程序,但是我遇到了一些困境。 这些问题要求用户为每个组件输入一组节点,然后为特定组件创建单独的向量,或者使用节点创建二次公式,取导数然后将其附加到主矩阵。现在我正在使用for循环,我不知道如何基于第i个值来命名向量,或者从用户的输入中创建一个符号变量。
以下是代码中存在问题的部分:
N = sym('a', k_number + 1);
for n = 1 : k_number %goes from 1 to the number inputted by the user
fprintf('Please enter the two nodes attached to spring %d\n', n) %requires the nodal number attached to the spring
num1 = input(''); %gets the first node value
num2 = input(''); %gets the second node value
N(n, num1) = sym('u%d%d', n, num1); %Suppose to replace value in N matrix with unique symbolic variable
N(n, num2) = sym('u%d%d', n, num2); %Suppose to replace value in N matrix with unique symbolic variable
end;
答案 0 :(得分:0)
不要使用sym
。请改用subs
。这将象征性地用另一个表达式替换符号矩阵中的变量。我将假设num1
和num2
将在每行的特定符号矩阵中选择两个唯一列。因此,做这样的事情:
N = sym('a', k_number + 1);
for n = 1 : k_number %goes from 1 to the number inputted by the user
fprintf('\nPlease enter the two nodes attached to spring %d\n', n) %requires the nodal number attached to the spring
num1 = input(''); %gets the first node value
num2 = input(''); %gets the second node value
old_var1 = ['a' num2str(n) '_' num2str(num1)]; %// CHANGE
old_var2 = ['a' num2str(n) '_' num2str(num2)];
new_var1 = ['u' old_var1(2:end)];
new_var2 = ['u' old_var2(2:end)];
N = subs(N, old_var1, new_var1); %// CHANGE
N = subs(N, old_var2, new_var2);
end
上面的代码将做的是,对于矩阵中的每一行,我们得到两个唯一的列号。然后,我们从每行的这两列中提取变量,并将它们从ax_y
更改为ux_y
。在我的机器上,当我创建N
时,这就是我在k_number = 4
:
N =
[ a1_1, a1_2, a1_3, a1_4, a1_5]
[ a2_1, a2_2, a2_3, a2_4, a2_5]
[ a3_1, a3_2, a3_3, a3_4, a3_5]
[ a4_1, a4_2, a4_3, a4_4, a4_5]
[ a5_1, a5_2, a5_3, a5_4, a5_5]
行号和列号由_
字符分隔。现在,让我们来看看上面的代码。其中大部分是相同的,但改变的是我们将创建4个新字符串。其中两个将创建与您想要替换的变量对应的字符串。这是old_var1
和old_var2
正在做的事情。接下来的两个将是与您要插入的新变量相对应的字符串,对应于new_var1
和new_var2
。如果我正确理解您的问题,则变量需要从a
更改为u
。我们最终使用subs
将此特定值替换为矩阵以替换这些变量。请注意,subs
将返回整个表达式,因此无需为N
中的特定位置分配输出。因此,我们将输出重新分配回N
,以便它不断更新。
使用上面的代码,这是一个运行示例:
Please enter the two nodes attached to spring 1
1
2
Please enter the two nodes attached to spring 2
3
4
Please enter the two nodes attached to spring 3
1
5
Please enter the two nodes attached to spring 4
2
3
运行代码后,这是N
:
N =
[ u1_1, u1_2, a1_3, a1_4, a1_5]
[ a2_1, a2_2, u2_3, u2_4, a2_5]
[ u3_1, a3_2, a3_3, a3_4, u3_5]
[ a4_1, u4_2, u4_3, a4_4, a4_5]
[ a5_1, a5_2, a5_3, a5_4, a5_5]
正如您所看到的,每行的这些列都被从用户读入的相应列替换。对于每个列,变量都从a
替换为u
。你似乎没有更新最后一行,但我认为这是你要解决的问题之一。