EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
各位大神好,本人现在遇到了一个棘手的问题,不知如何使用matlab进行分组预算。
; r5 k' H+ p/ l如图所示,本人已将数据进行分组完毕,运算部分的代码很简单,本人也已经完成,只是这个识别分组这里不太会,如果不能实现分组识别计算的话,几万组数据只保存在一个excel文件中,手动输入的话,确实有些繁琐,烦请各位老师指导一下。
+ }' x( d8 ^ _* b+ l# d本人已完成的代码部分也一并提交,代码中的数据为其中一组数据,望各位老师予以添加修改并指导,多谢! 目前本人的代码只是将图片中的前两列数据手动复制进代码,本人想直接将图中的三列数据全部导进去,并根据第三列的数组进行分组计算(数字相同的为一组) ps:本人使用的是Matlab r2018a,运行环境的macos
" a# N9 l) Q# P$ R w+ ^
; S3 A* X9 m7 [" A6 ?$ Y
. m$ ?( l& ^( k3 D/ G x = [4.1441 0* x( |7 C1 ^1 l1 X6 l2 h2 S
4.4684 0( h8 C7 k; n2 m4 u+ U
5.7308 0.0025 a/ C% B0 {! ~* L9 C
9.4417 0.0042' p$ d# c$ e- |* ?$ C
11.6335 0.0059& w6 x3 @0 x F Y: v
13.4882 0.00731 C) p2 D M$ v9 |+ t9 @) ]- I3 i
14.247 0.0078
9 E+ W( `/ j0 e+ S$ s8 j& Q/ }14.6688 0.008
% l8 ^. p- X, Y+ p$ a. C2 @6 i13.7427 0.0068' ]7 c5 g' }5 u9 E4 n: U& w, a* U
11.8059 0.0044
% S3 L4 E1 K7 J8.6033 0.0015& u' y. V% k3 Q, o. a+ m
5.2315 -0.0013
$ s8 X: E9 x5 b+ R0 b( i# c1.6184 -0.0036
. s; H2 O3 ]$ e/ A-0.8267 -0.0055! m. U/ K9 ?# [1 N
-3.5249 -0.0076
, i0 g& s) @0 I-5.0424 -0.00893 X ?9 ^. Y; P. w# j4 M
-5.97 -0.0096
# O. V2 n2 L) ^/ T, L/ ?-5.9694 -0.0099
% s$ w4 o5 j4 T; M0 t-5.5492 -0.0089) G+ O4 b1 C0 Y. ]
-3.0212 -0.0062
0 z' x7 p. D8 J* W9 e- |% G# c/ t-0.4088 -0.0035];" j3 A0 o. A. J% p
% p0=[1 1 1 1 1 1];
* t, [3 M4 v0 i X# m p0=[0.005 0.005 0.005 0.005 0.005 0.005];
, v Q: t5 T( Gwarning off4 @! Z( V# [: d8 V/ n8 A; a
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);% b3 C4 C' I5 s" J1 ]4 U H
% 拟合系数,最小二乘方法
9 n) S9 q" ?( t4 e3 J' Ip=nlinfit(x,zeros(size(x,1),1),F,p0);5 a! k5 }; p' `) _7 T4 ~
p(1)
9 U! i: N" Z( W/ Up(2)# U2 Z: D, ?! E" A
p(3)
1 w0 h7 U4 B! _7 V$ X" W1 p3 ?p(4)
' u c0 q! U- j$ L. _, Z* hp(5)! y# I* c+ o% n
p(6)
" |- Y6 w+ Y* \# }: B$ T, X( j; _6 \. u
/ J# @; e$ ?! n& Z' n. t" _A=p(1)/p(6);# @. b$ U" }0 I0 K2 c' H9 F
B=p(2)/p(6);! ]/ p; ~) Y) i0 E- a& }. _- a
C=p(3)/p(6);
" Z, L6 A/ F( \1 y4 M! w# {* YD=p(4)/p(6);
" P( f S) B. iE=p(5)/p(6);
4 f* t: j" _3 |/ y; \. R" G/ V8 z1 {$ M1 t3 j+ X. r* ] s% u- b
/ r4 j2 c; ^( E/ p! o' n* y4 ?6 D9 v%%椭圆中心7 E+ O6 h' a* B0 w' _
X_center = (B*E-2*C*D)/(4*A*C - B^2);
3 n. ?4 I3 @. I4 W8 W9 i+ LY_center = (B*D-2*A*E)/(4*A*C - B^2);" d: m: `; i( z9 s1 m; ]! B4 V U
fprintf(' X_center=%g, Y_center=%g\n',X_center,Y_center);& }% F* L x8 m& I, o" V$ F( i
%%长短轴
! P7 }+ R) x6 N; z6 Da= 2*sqrt((2*A*(X_center^2)+2*C*(Y_center^2)+2*B*X_center*Y_center-2)/(A+C+sqrt(((A-C)^2+B^2))));
& _# J( Y* v; \ Zb= 2*sqrt((2*A*(X_center^2)+2*C*(Y_center^2)+2*B*X_center*Y_center-2)/(A+C-sqrt(((A-C)^2+B^2))));
6 y& b% W/ e1 B
j" _! M; ]* j' T# D4 U4 M( ]( p
- O8 T1 Q O% \# ]: c! {%%长轴倾角* O/ s2 m( [& e0 f1 I
q=0.5 * atan(B/(A-C));2 U0 B+ F# \* a5 c
fprintf(' q=%g\n',q);
" }, q$ }5 d4 b0 Y* K. Y
) ]* \ k* w( ~6 n* w8 r6 |, w& D+ H3 G- L' Z( z
fprintf(' a=%g, b=%g\n',a,b);9 s9 o d8 N! O) ^+ }2 [% _2 Z. ]
plot(x(:,1),x(:,2),'ro');
0 I) j3 P4 b0 B5 Z8 P7 Y. i. T& R+ e) |/ O5 g3 {$ S' M/ t+ a
: p% f3 r4 B9 Qhold on;
) A J" x* }; jxmin=min(x(:,1));
: W- W, o# |1 y+ d+ g& kxmax=max(x(:,1)); A9 b3 A9 _% y9 m; R
ymin=min(x(:,2));1 S4 }' b4 i8 Y% L3 y7 \- i) e' H
ymax=max(x(:,2));
4 ^& s4 c# h: c/ hxmid=(xmax+xmin)/2;
5 X" E& N7 r* m- Oymid=(ymax+ymin)/2; \& Y2 _- p! ?1 E2 l. K5 x
stri=(xmax-xmid)*(ymax-ymid)/2;* C2 i+ {/ Q; b+ E) j% c
S=a*b*pi;3 M |. x+ ~2 w7 Y" P8 N. l
z=S/4/pi/stri;, E. |2 a2 K. r% c+ |; F
% 将数据组集到data, q, j2 s2 y! I; C5 t0 W w6 X0 }6 n
data = [xmin',ymin',xmax',ymax',xmid',ymid',a', b', A', B',C',D',E',stri',S',z'];) a6 c5 f p5 C6 K+ Q5 ^
% 将data切割成m*n的cell矩阵
4 F- b8 p; m9 V9 R" v[m, n] = size(data);
7 Z6 c* ?5 R4 F3 Z* N; c, Vdata_cell = mat2cell(data, ones(m,1), ones(n,1));
! H5 R; q8 d1 Q% ~1 V% 添加变量名称 y6 B# {: Z4 j9 s3 B; ]$ K o
title = {'xmin','ymin','xmax','ymax','xmid','ymid','a', 'b', 'A', 'B','C','D','E','stri','S','z'};
/ a2 P% n6 O0 Z6 A+ k% 将变量名称和数值组集到result, n- d- U; p& Q* i5 {
result = [title; data_cell];
+ @& V$ Y3 F9 ]# Z% 将result写入到wind.xls文件中& F$ w' R* _( l7 G! }
s = xlswrite('wind.xls', result);
: G( g& Z3 t {0 u1 g" F- E+ R, z- `2 E- d+ F' D/ F6 U8 l- c
@9 f$ v& {9 G8 V! \& P
% 作图: F$ X' t5 H. m6 J3 m
%ezplot(@(x,y)F(p,[x,y]),[xmin,xmax,ymin,ymax]);
# o8 z# i. R& F/ e% j' r7 G%title('曲线拟合');0 m- M- P' K. K2 U" Y
%legend('样本点','拟合曲线')1 t& |7 I. R0 x
: b8 g# Y) z# V
% r( ?5 F1 w% ~5 i" ?6 _" f7 c2 [5 Y% M- [$ w0 P5 c
; R+ L% F' k, Z L# U: ]+ V) C
: A& ?1 e0 Q, \( o
3 A; S: h T1 G8 l! \
# o/ G" y: |5 f Z |