- 台形の面積は解析的な解が存在するので,piecewise関数やint関数を用いることなく陽に答えを書くことができそうですが,そのようにしない回答が必要,ということでしょうか?そうでないなら,問題は簡単になります.
- 添付画像を見ると,t1<t2<t3<L/2という条件が成立しそうですが,main.m内ではその条件が成り立っていないと思います.画像が正しいのであれば,コードを見直す必要がありますが,どうでしょうか?
combvecによるメモリ不足および積分計算に関しまして
1 次查看(过去 30 天)
显示 更早的评论
Xにより7つのパラメータを遷移させた上で,解としてk3を求めるプログラムを組んだのですが,エラーが発生してしまいました.
操作としては,Xで全てのパラメータのパターンを網羅したベクトルをつくり,別のmファイル(trap2.m)から関数を呼び出し各パラメータを代入し,方程式eqnを満たすk3を求めるといったものになります.
また,方程式eqnはパラメータk1,k2,t1,t2,t3,p1,p2を与えた上で,trap2.m(台形を組み合わせた関数)の面積が0となるようなk3を求めるといったものです.
trap2.mの概形は写真にて添付させていただきました.
よろしくお願い致します.
【main.m】
close all;
clc;
clear;
L = 10;
lim = L/2 - 0.5;
X = (combvec(0.1:0.1:0.5, -0.1:-0.1:-0.5, 0.5:0.5:lim, 0.5:0.5:lim, 0.5:0.5:lim, 0.5:0.5:lim, 0.5:0.5:lim))';
k1 = X(:, 1);
k2 = X(:, 2);
t1 = X(:, 3);
t2 = X(:, 4);
t3 = X(:, 5);
p1 = X(:, 6);
p2 = X(:, 7);
syms s k3
f2 = trap2(s, k1, k2, k3, t1, t2, t3, p1, p2, L);%%%%%% k3を求めるために変数をs,k3にした関数f2
eqn = int(f2, s, [0 L/2]) == 0; %%%%%%% k3に関する方程式を定義
k3 = solve(eqn,k3) ; %%%%%%%%%%%%%%%% 関数f2のトータル面積が0になるようなk3を求値
sprintf('fin')
【trap2.m】
function f = trap2(s, k1, k2, k3, t1, t2, t3, p1, p2, L)
t1_prime = t1 + p1;
t2_prime = t2 + p2;
a1 = (k2-k1)/(t2-t1_prime); %%% 傾き1
a2 = (k3-k2)/(t3-t2_prime); %%% 傾き2
f = piecewise(0<=s<=t1, (k1/t1)*s,...
t1<=s<=t1_prime, k1,...
t1_prime<=s<=t2,a1*(s-t1_prime)+k1,...
t2<=s<=t2_prime, k2,...
t2_prime<=s<=t3, a2*(s-t3)+k3,...
t3<=s<=L/2, k3);;
end
0 个评论
回答(1 个)
Shota Kato
2020-10-11
以下の2点を確認させてください.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 微積分 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!