找回密码
 注册
关于网站域名变更的通知
查看: 546|回复: 3
打印 上一主题 下一主题

matlab解常微分一直报错返回列向量

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-5 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我的代码解常微分一直说要返回列向量,有大神帮忙看看嘛
4 H8 i+ N+ w$ W! x
& O6 T( ^& h, A( r$ Q$ `$ g: q/ K这是代码:  M& C# c3 b0 d& Z$ |! s
function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)3 |; ~( d- |! ?
switch flow
) d9 K% `! T, k- s: p9 v# G0 {case 'creep & recovery', u8 Z9 K6 a. i0 T
        stress0=arg(1);
6 J. t2 K, h$ f' p        risetime=arg(2);; y2 I+ U1 x* J6 `- i
        creeptime=arg(3);1 l* u& y3 Q  y
        if t<risetime; r! W/ Z2 }# w7 ^/ p8 w
            stressrate=stress0/risetime;/ W5 y) `4 N0 f8 f7 o- O
            stress=stressrate*t;
  P6 S; v. N, X, m6 ?        elseif t<creeptime2 A7 O# v4 `9 \' V& ?2 l
            stressrate=0;
8 p) ^; o( l6 R7 w; ^' K            stress=stress0;6 G1 @% j$ b8 N8 m4 a. }: W0 s
        elseif t<creeptime+risetime
# y* X  g4 w$ t0 O' a4 |2 S8 _            stressrate=stress0/risetime;& h" o, y) \! }; Q) g! K5 o  u
            stress=stress0-stressrate*(t-creeptime);" t6 e) Z5 z5 I! Z
        else
& L+ Z& a4 ?9 c            stressrate=0;
. D/ {; i7 _" l            stress=0;
$ e: v# U' @( v- i6 h- G        end, a& e( P! A/ Z3 |) b, j
        gam1=y(1);9 g3 C9 x& L  o% b
        gam2=y(2);- }: E6 e$ K( v1 m! d& U
        s(1)=gam2;7 ?* c% [& b9 ?
        s(2)=G1/(eta1*eta2*((abs(gam1)-contactstrain)>0))*((stress-eta2*gam2*((abs(gam1)-contactstrain)>0)-sign(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))*yieldstress)*((abs(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))-yieldstress)>0)-eta1*gam2+eta1/G1*stressrate);
1 U& q: t, ?- `4 {) X+ K, |0 ?' S+ ~/ I, f: O2 c
% d4 M8 @  H" a2 P# G2 S
6 a% p: \# Q+ K+ a
clear all
' M* U& N% |8 Q, @7 mclc5 ]" e6 ]+ A' ?4 k& J) ^  t
warning off
( a" [( n" W( Q3 |- }+ f* _2 P3 L7 V
eta1=10;  % [Pa.s]
1 h0 ~$ z5 r; @4 e' ~eta2=20;  % Pa.s]
6 L. N$ H- h5 X5 bG1=2;   % [Pa]! o9 w# [1 j4 `2 z2 [  H6 \4 w9 B7 n# |
G2=5;   %[Pa]0 N3 u5 R; T0 A( _$ G1 ~" Q
yieldstress=5;  % [Pa]
" h' k0 n; U: r% Ncontactstrain=5;
2 L$ @; }8 J; v5 k7 I) A+ d) V. @. o8 i$ |% K
; m0 m- y8 {6 V, B# u  R9 H
flow='creep & recovery';( U6 S0 l1 [; L; \
stress0=1:2:10;
% ?( }. _5 |# C" u( ?9 orisetime=0.01;
; X; A  `% V% b+ f# [creeptime=100;6 i7 u* y, V- }8 X
for i=1:length(stress0)
, j7 J; S3 g# {4 \8 e    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);7 C. X& _' i/ n7 y6 t, h
    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on1 x8 q5 _7 Z3 y' ^, g: w) k+ Z5 P
    a{i}=strcatnum2str(stress0(i),'(Pa)');
9 V# G/ e4 V  w4 f) Wend
4 N2 ~3 b, X! q' [/ M( c1 R- N5 uxlin([1e-4 1000]);   
0 W# o: f, i1 s6 O) ~  j  \4 `5 nxlabel('Time(s)');      ylabel('Shear strain(-)');& g" o. k% G1 p- Q; W
legend(a)
: L" F2 ~6 r9 U3 d' c7 {9 Q6 |5 y$ l. J

  x$ M6 H: [3 z! N7 @7 \8 r5 \9 t& o1 I5 J# W% A
错误使用 odearguments (第 93 行)$ ]: @3 {  T. p1 A- c1 v- {
MYWORK 必须返回列向量。
9 I& ]( x7 p3 f0 m- y6 H) [' \. _: d6 p+ J; O" {6 C1 {' R
出错 ode15s (第 152 行)
* `; i- u: e! r8 U    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);4 N8 T; U7 e& |, ?" F% U# F$ a

* j% E' Z' L" u  X出错 Untitled2 (第 20 行)
/ K" a% u# Z( @& ?5 Y+ M    [t,strain]=ode15s(@mywork,[0 10],[1 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);5 D# y/ K" B3 y2 b! o9 q% ]7 C/ m
1 b. K' J8 R% k

% H( v$ \) D' {3 G感谢大神们!
# }# c& k& |' V% E7 N9 t# W) k

该用户从未签到

2#
发表于 2021-1-5 13:09 | 只看该作者
clear all+ E( h$ s4 }5 z" Y. z) p
clc
. ?! v# D* U- g3 G$ `warning off9 y3 y4 I) w4 Q1 Q
, R8 |1 T9 p1 w) `) i
eta1=10;  % [Pa.s]3 ^/ G9 T$ k  }* e2 I+ w
eta2=20;  % Pa.s]; i" I# H6 G$ y5 _6 v
G1=2;   % [Pa]
" \  {( n# l* T3 Q0 NG2=5;   %[Pa]
  L6 J6 ?7 i- a$ Qyieldstress=5;  % [Pa]
. h0 p$ Z+ L3 G6 S' Wcontactstrain=5;
; P; U, c# e; i& O. s5 H$ T2 X) g" x+ w

" N" [/ F) A, {$ c; Q: A) H7 r- _flow='creep & recovery';
( B: g$ ~' T2 O7 x8 f& `stress0=1:2:10;
$ F+ ~# L; h& D) C- \risetime=0.01;
$ F: x" h; z% K% J5 screeptime=100;3 \' T9 ~  N) q0 w
for i=1:length(stress0)
* ]( l) p! E3 x7 ^. ^$ v- z( `& }    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);
0 N4 e* c! ~8 `: K! j    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on  M5 T* w; D, M
    a{i}=strcat(num2str(stress0(i)),'(Pa)');: v; C5 _% o5 x9 J8 @+ E: @. T: B
end; n5 y. M" g5 S- b, B
xlim([1e-4 1000]);5 L- j9 L( P5 Z9 g
xlabel('Time(s)');      ylabel('Shear strain(-)');
& a2 r9 \- S3 T$ e& n. flegend(a)
# C' ]4 U" e: y" Y: {: K) k+ Lfunction s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)3 ^4 X/ \; F( N7 E0 O) `+ @
switch flow7 n& l; _$ U) j7 U" h9 H% w' m# A
    case 'creep & recovery'
. n& O: u  `6 l        stress0=arg(1);
5 m7 ^& i) `  Q& C: r! \/ O        risetime=arg(2);5 ~+ u' F  T# O6 ]
        creeptime=arg(3);" P0 J8 [" u; U/ {# y' ~* {8 f
        if t<risetime* Z. S+ o/ ]) v2 ?' k
            stressrate=stress0/risetime;
* V! e' l1 \9 L3 ~  j; A. N            stress=stressrate*t;2 f6 Z+ z( G, [: @- [% Q5 S/ S
        elseif t<creeptime/ s& I$ X+ W7 W, q& y0 n
            stressrate=0;
2 a5 \1 L% i; o1 V            stress=stress0;) R0 [. F+ b. f2 @! {7 |/ @
        elseif t<creeptime+risetime
& Y& `+ d" [" B+ R            stressrate=stress0/risetime;
5 X! _: l% O, F            stress=stress0-stressrate*(t-creeptime);; W8 E9 E/ G* w# g
        else
; I1 ~  W' I1 i2 ]% S, u5 T            stressrate=0;3 e% M0 u6 X8 d4 [9 s" f. v
            stress=0;" U4 `% [* T9 F" q, K, }+ w
        end3 u( @% j! m, A) a9 N
        gam1=y(1);
  N. C# u' o5 o& a. I  W+ N- Y. e6 p        gam2=y(2);
5 A" F9 Z% }6 o- G$ c        s(1)=gam2;
2 i3 o; ?6 c  }. q) {        s(2)=G1/(eta1*eta2*((abs(gam1)-contactstrain)>0))*((stress-eta2*gam2*((abs(gam1)-contactstrain)>0)-sign(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))*yieldstress)*((abs(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))-yieldstress)>0)-eta1*gam2+eta1/G1*stressrate);
1 T7 h! t8 s5 A5 K& P- ~$ ^        s=s';" N4 \( j7 C2 G1 o
end
5 V, J+ N/ c  M' B* Tend

该用户从未签到

4#
发表于 2021-1-5 15:43 | 只看该作者
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 12:09 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表