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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我的代码解常微分一直说要返回列向量,有大神帮忙看看嘛7 d( z; K2 {$ y" R
# e  N- G" w) P
这是代码:& o; y5 P' a# D: e
function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)& ^  P9 l0 f& I$ g* N
switch flow
2 g4 o* [( E. E" _; i; wcase 'creep & recovery'' ^9 s3 s. H6 i
        stress0=arg(1);
, w1 \5 C9 |$ h  e8 F8 K/ y        risetime=arg(2);
2 K( a- Z- M" I3 A/ p0 \: B. p# r) O        creeptime=arg(3);
9 l" X* |! v4 L        if t<risetime
! ^' E7 J3 L4 N& e! @' N            stressrate=stress0/risetime;
/ U3 k: u. D3 R' H$ V            stress=stressrate*t;
# d) [: m+ u" B8 A. a        elseif t<creeptime
: e. U5 n* }$ K$ ?            stressrate=0;
7 d5 d: v, L6 c            stress=stress0;0 E* s( ^% {$ O9 T" Q- n
        elseif t<creeptime+risetime
' U0 b/ k2 o$ Y/ V9 Q            stressrate=stress0/risetime;
. m2 W4 A# A. V% H0 q0 ^& d            stress=stress0-stressrate*(t-creeptime);8 A5 q& \3 ?6 {- J8 C9 E- D
        else
4 l% G" w6 [" s; |. X9 ?/ }6 d- H0 l. a            stressrate=0;2 `4 T" s4 m/ l- }
            stress=0;9 \2 E# o- g4 n8 j0 A
        end( l) l' y; C& b& a( k1 t4 }( h
        gam1=y(1);
: n$ ]' [" t% p; w        gam2=y(2);8 P$ E% S  V( {& @. y4 O
        s(1)=gam2;
4 d, t2 T& j- e6 e6 Y" Q+ _) {4 V* m        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);  @% ?. `  f# \) b4 c

# H$ l' m3 A& D8 W" M0 I. g7 H' }# H" D8 [9 @7 a# V- o6 f

" t: I& @  k5 oclear all
# P6 [/ k3 |! Y9 P1 o3 [clc
7 Q( Z: K( f5 nwarning off' A+ `  J, p9 \' t9 I

! q2 @% [( V) B+ M8 k' u; Heta1=10;  % [Pa.s]
8 A5 c/ @2 ~. j; }% k! Feta2=20;  % Pa.s]- P6 N: [& X. u0 W; _3 H
G1=2;   % [Pa]
( M0 j6 I  D  T, K! jG2=5;   %[Pa]# v5 x% W( K; X/ c# s# v6 T9 w
yieldstress=5;  % [Pa]
3 r/ b* F3 L7 [5 Z% W' Qcontactstrain=5;; ^1 K# ]% a: V3 K* B/ `

2 y1 G$ S1 u8 i+ D. w7 I# E" Y- X. i) S- O0 u
flow='creep & recovery';1 [" {5 i+ _; c/ M' ^. P* |
stress0=1:2:10;
! x( H. Q' M( e4 _0 ~risetime=0.01;, R( ?1 e8 J, t9 m* f
creeptime=100;; }' r- ~' {' I/ S, d! o  F( K( N' P2 A
for i=1:length(stress0)8 E0 t0 z, P9 i: k
    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);, F6 a. j; Q# b" r% ~
    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on4 X: z& F7 c2 X) V2 N
    a{i}=strcatnum2str(stress0(i),'(Pa)');" r5 l' l/ e) ~, g5 N
end- |# W, u! E( [9 J) n
xlin([1e-4 1000]);   $ L$ w: w* K) q  X. }6 y
xlabel('Time(s)');      ylabel('Shear strain(-)');# Q) K  S( q5 U4 O& f
legend(a)
( X7 B, M, w7 G0 j6 ]8 [$ T, `' }7 C) ]
, g4 q& ?( a2 Z% @/ m+ O  r! K# Z

1 \: `% n2 f) Q1 Z* @+ I错误使用 odearguments (第 93 行)8 [" r# ~5 E- `2 _( P9 e; t6 P, g6 v
MYWORK 必须返回列向量。
* [" g$ a8 t% x7 c
# j2 q: Z$ W! u+ e" ?出错 ode15s (第 152 行)
+ A  M+ {7 P' {6 R- T    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);) @. r) L5 O8 F$ e

$ {8 }7 R* `4 o+ L$ E4 R; a出错 Untitled2 (第 20 行)9 ^* S; K  Z2 |7 _7 T
    [t,strain]=ode15s(@mywork,[0 10],[1 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);
% N6 u3 U% {" e. |  r0 Z0 j2 N  d/ G+ X9 o9 G3 u, M2 l$ u
, D  z$ Q6 Y  @: B! a% J
感谢大神们!6 I  e& ?' x6 |9 n$ V8 J

该用户从未签到

2#
发表于 2021-1-5 13:09 | 只看该作者
clear all/ T. ^: \* a; x+ R! y# l. W1 z
clc0 |8 _& N4 ~9 X
warning off
  D/ S) u7 Z" }# E
/ ~, p1 O# B6 x0 V- Z8 @8 w  Teta1=10;  % [Pa.s]& x$ w/ D; [0 P+ t& U& h# k5 e/ {. a! k
eta2=20;  % Pa.s]
7 M9 h) Q, N. R2 @) R6 F' IG1=2;   % [Pa]1 ?& T! V- j& I' M- [# P
G2=5;   %[Pa]3 o5 i4 @4 @# Z9 R( K% _. N2 g
yieldstress=5;  % [Pa]
- t" n; r: J# V6 z8 C6 q( B6 L. lcontactstrain=5;
: L7 T  s+ V0 d  \4 ]: y$ [$ K, \) ]; e
; ^6 n, M2 D8 v, G4 W0 C
flow='creep & recovery';7 Y1 X* l  t! h- O! i& U) g5 O
stress0=1:2:10;
9 J7 r% }+ G# h( z6 c/ [' r1 ~risetime=0.01;3 v% o* r. g4 F' X* h; ?  S
creeptime=100;
% P3 b) }4 S& l. ~" u6 K+ a9 R/ `2 kfor i=1:length(stress0)6 h% H! k; y2 }3 z# J
    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);) h& q8 e2 ~9 Y8 E$ s6 u  V# s. M
    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on
( q; z) e" t( U( b) Y    a{i}=strcat(num2str(stress0(i)),'(Pa)');- y4 ~; S7 f3 [8 w. H
end" s; [. B3 N0 {0 s4 }( x2 q
xlim([1e-4 1000]);; E( t# V1 [8 ^) ]4 X1 ~/ f+ s: e5 M
xlabel('Time(s)');      ylabel('Shear strain(-)');5 G( U4 A. r7 u9 L
legend(a)
+ {# f# i8 V( g1 A9 f" N5 [function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)
$ x6 P" S3 L1 O! K, ?switch flow5 c9 p4 a. o/ O8 A  T7 g
    case 'creep & recovery'" G6 g9 a- O, j8 Y) g1 ^. C
        stress0=arg(1);2 d" u9 x* A: L9 ~2 ?! G
        risetime=arg(2);9 k; n" D* u& ]& l: D
        creeptime=arg(3);
. u' Y: @2 O6 @: Q# ?* Z        if t<risetime
& [( ~' x+ e% h( Z1 F            stressrate=stress0/risetime;  l  \$ n7 ^# T* _0 a# r$ t, ?
            stress=stressrate*t;
3 D& E; Z" H7 q; a2 I& {/ p        elseif t<creeptime. [( p; t( g; B) \6 Z
            stressrate=0;9 O0 P: [4 A5 t! V4 `" Y! e. R
            stress=stress0;( l* d2 N* `- o, M, i- P
        elseif t<creeptime+risetime6 m. u) G5 x  x. |0 a+ d8 L1 Y3 X1 c
            stressrate=stress0/risetime;, f& S( ~* p0 k1 C' t/ v$ f
            stress=stress0-stressrate*(t-creeptime);
* V; P, K: s% M: n: u        else# T' d( A3 Y' g0 x' e  ^. G6 j6 Z
            stressrate=0;: V2 T7 ?) I5 c" l! T
            stress=0;
4 ?' k( U4 d6 B" `# c! h& n        end/ r6 H3 T3 @7 J6 a1 ?
        gam1=y(1);
. S9 n# v/ U9 ]. l" q8 A        gam2=y(2);
& o1 [. }8 g  X. Q! p        s(1)=gam2;
  e" Q% s3 H) t- t8 g  U% 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);
9 F3 p; N" ?% [. o        s=s';( o, n" a8 o! ]9 ]& Y
end3 x6 W8 U& k3 t7 i/ x% G7 n8 z' u
end

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:47 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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