如何调用多个依赖函数?
How to call multiple dependent functions?
我想在代码中像这样调用多个依赖函数。
function [k11,k12] = k_fun()
% syntax is : function [outputs] = function-name(inputs)
a=2.0;
k11 = quad(B1,B1,a); %error
% For k11, I want to call function b_fun and select only B1,B2 to pass to function quad.
k12 = quad(B1,B2,a);
endfunction
function [B] = b_fun(x)
B1 = -0.5+x;
B2 = 2.0*x;
B3 = 0.5+x;
B=[B1,B2,B3];
endfunction
function [value] = quad(B_i,B_j,a)
value=0
points = [0.57,-0.57];
wt=[1.0,1.0]
for (ct=1:1:2)
value = value + (B_i(points(ct))*B_j(points(ct))*a)*wt(ct);
end
endfunction
我想要 运行 函数 k_fun。 a=2.0
后会转到 k11 行。对于 k11
,我想从 b_fun()
中获取 B1
和 B2
,并将其传递给 quad()
。在 quad()
中,函数将被计算。
我正在努力
k12 = B1(0.57)*B2(0.57)*a*1 + B1(-0.57)*B2(-0.57)*a*1
。这些值 +-0.57 出现在函数 quad
中。我不知道如何在行 %error
中传递 B1
和 B2
。我陷入了调用依赖函数的困境。我非常想保留相同的程序格式(在各个函数中定义的变量),因为原始程序是这样的。后来,我想把这个程序翻译成C++,所以想使用编程语言的标准函数而不是特定的函数。
顺便说一下,我在 Octave 中启动程序,所以在 MATLAB 中 endfunction
而不是 end
。
你最好的选择是稍微重组一下,这样每个 B*
变量都有一个单独的 b_fun
版本。然后,您可以为这些 b_fun
创建一个函数句柄,并将 that 传递给 quad
.
function [k11, k12] = k_fun()
a = 2.0;
k11 = quad(@b1_fun, @b1_fun, a);
k12 = quad(@b1_fun, @b2_fun, a);
end
function result = b1_fun(x)
result = x - 0.5;
end
function result = b2_fun(x)
result = 2 * x;
end
或者,您可以只创建 B1
和 B2
匿名函数,因为它们非常简单
function [k11, k12] = k_fun()
a = 2.0;
B1 = @(x)x - 0.5;
B2 = @(x) 2 * x;
k11 = quad(B1, B1, a);
k12 = quad(B1, B2, a);
end
这是另一种方法:
B = @(x) [-0.5 + x ;
2.0 .* x ;
0.5 + x ];
现在您可以将行向量传递给 B
并获得一列输出!所以
points = [0.57,-0.57];
B(points) =
0.0700 -1.0700
1.1400 -1.1400
1.0700 -0.0700
然后你说你想实际计算:
k12 = B1(0.57)*B2(0.57)*a*1 + B1(-0.57)*B2(-0.57)*a*1
在这个新结构下,
k12 = B(1,1)*B(2,1)*a*1 + B(1,2)*B(2,2)*a*1
我不确定您为什么将 *1
留在其中,但为了完整起见,我保留了它们。总之,你只需要一个B_output = B(points)
变量,B2
现在通过B_output(2,i)
访问,其中i
是对应points
的列索引指数。如果你只过了B(x)
一分,你可以说B2 = B_output(2)
!
总结一下
你的整个代码可以写成:
a = 2.0;
B = @(x) [-0.5 + x ;
2.0 .* x ;
0.5 + x ];
k11 = quad(B, 1, 1, a);
k12 = quad(B, 1, 2, a);
function value = quad(B, i, j, a)
value = 0;
points = [0.57,-0.57];
wt = [1.0,1.0];
B_output = B(points);
for ct = 1:2
value = value + B_output(i, ct)*B_output(j, ct)*a*wt(ct);
end
end
我想在代码中像这样调用多个依赖函数。
function [k11,k12] = k_fun()
% syntax is : function [outputs] = function-name(inputs)
a=2.0;
k11 = quad(B1,B1,a); %error
% For k11, I want to call function b_fun and select only B1,B2 to pass to function quad.
k12 = quad(B1,B2,a);
endfunction
function [B] = b_fun(x)
B1 = -0.5+x;
B2 = 2.0*x;
B3 = 0.5+x;
B=[B1,B2,B3];
endfunction
function [value] = quad(B_i,B_j,a)
value=0
points = [0.57,-0.57];
wt=[1.0,1.0]
for (ct=1:1:2)
value = value + (B_i(points(ct))*B_j(points(ct))*a)*wt(ct);
end
endfunction
我想要 运行 函数 k_fun。 a=2.0
后会转到 k11 行。对于 k11
,我想从 b_fun()
中获取 B1
和 B2
,并将其传递给 quad()
。在 quad()
中,函数将被计算。
我正在努力
k12 = B1(0.57)*B2(0.57)*a*1 + B1(-0.57)*B2(-0.57)*a*1
。这些值 +-0.57 出现在函数 quad
中。我不知道如何在行 %error
中传递 B1
和 B2
。我陷入了调用依赖函数的困境。我非常想保留相同的程序格式(在各个函数中定义的变量),因为原始程序是这样的。后来,我想把这个程序翻译成C++,所以想使用编程语言的标准函数而不是特定的函数。
顺便说一下,我在 Octave 中启动程序,所以在 MATLAB 中 endfunction
而不是 end
。
你最好的选择是稍微重组一下,这样每个 B*
变量都有一个单独的 b_fun
版本。然后,您可以为这些 b_fun
创建一个函数句柄,并将 that 传递给 quad
.
function [k11, k12] = k_fun()
a = 2.0;
k11 = quad(@b1_fun, @b1_fun, a);
k12 = quad(@b1_fun, @b2_fun, a);
end
function result = b1_fun(x)
result = x - 0.5;
end
function result = b2_fun(x)
result = 2 * x;
end
或者,您可以只创建 B1
和 B2
匿名函数,因为它们非常简单
function [k11, k12] = k_fun()
a = 2.0;
B1 = @(x)x - 0.5;
B2 = @(x) 2 * x;
k11 = quad(B1, B1, a);
k12 = quad(B1, B2, a);
end
这是另一种方法:
B = @(x) [-0.5 + x ;
2.0 .* x ;
0.5 + x ];
现在您可以将行向量传递给 B
并获得一列输出!所以
points = [0.57,-0.57];
B(points) =
0.0700 -1.0700
1.1400 -1.1400
1.0700 -0.0700
然后你说你想实际计算:
k12 = B1(0.57)*B2(0.57)*a*1 + B1(-0.57)*B2(-0.57)*a*1
在这个新结构下,
k12 = B(1,1)*B(2,1)*a*1 + B(1,2)*B(2,2)*a*1
我不确定您为什么将 *1
留在其中,但为了完整起见,我保留了它们。总之,你只需要一个B_output = B(points)
变量,B2
现在通过B_output(2,i)
访问,其中i
是对应points
的列索引指数。如果你只过了B(x)
一分,你可以说B2 = B_output(2)
!
总结一下
你的整个代码可以写成:
a = 2.0;
B = @(x) [-0.5 + x ;
2.0 .* x ;
0.5 + x ];
k11 = quad(B, 1, 1, a);
k12 = quad(B, 1, 2, a);
function value = quad(B, i, j, a)
value = 0;
points = [0.57,-0.57];
wt = [1.0,1.0];
B_output = B(points);
for ct = 1:2
value = value + B_output(i, ct)*B_output(j, ct)*a*wt(ct);
end
end