EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
各位大神好,本人现在遇到了一个棘手的问题,不知如何使用matlab进行分组预算。8 W1 j: w8 L2 }5 r2 H! e: j
如图所示,本人已将数据进行分组完毕,运算部分的代码很简单,本人也已经完成,只是这个识别分组这里不太会,如果不能实现分组识别计算的话,几万组数据只保存在一个excel文件中,手动输入的话,确实有些繁琐,烦请各位老师指导一下。' u4 }+ v0 \. N/ {
本人已完成的代码部分也一并提交,代码中的数据为其中一组数据,望各位老师予以添加修改并指导,多谢! 目前本人的代码只是将图片中的前两列数据手动复制进代码,本人想直接将图中的三列数据全部导进去,并根据第三列的数组进行分组计算(数字相同的为一组) ps:本人使用的是Matlab r2018a,运行环境的macos % s) a/ d! u( `" V6 N: W, b) g$ p4 W
' r* ?# a! z2 s
& R% k" ~, m0 m- u/ q) o x = [4.1441 0
) b! D6 }8 n) f5 c4.4684 0
+ ^% W; s' i( G! H5.7308 0.0023 N2 s" n: e$ O- R$ ~0 Y( P, c4 D- @
9.4417 0.00420 A3 T% w( Z) d; I
11.6335 0.0059
$ |8 F! m+ k$ H# D: }+ Y13.4882 0.0073
4 Q% S# C, @. p! B3 D: c; f0 q2 |14.247 0.00783 u1 _. l' d J
14.6688 0.008
# h8 {$ {5 }2 e) \) @7 }% s13.7427 0.0068. F. g& ]/ V. n5 R
11.8059 0.0044& b7 n0 M6 g7 ?( R8 h1 |
8.6033 0.0015
$ a9 N& Z( f: R5.2315 -0.0013
' T6 |( E4 z7 T" f2 v# ~1 i1.6184 -0.0036
6 `4 j3 J Q% j-0.8267 -0.00552 t0 A- _9 c$ b# n/ D
-3.5249 -0.00768 h$ M5 y, ~& P% m: |
-5.0424 -0.00895 ^# X0 @) U5 d) ^
-5.97 -0.0096" q( j0 o& \/ a ^& {, T4 S* u
-5.9694 -0.00995 ^! n' p; m. V5 u
-5.5492 -0.0089
% y: N" [ y- ~9 `-3.0212 -0.0062, i4 @! D+ x4 {4 B8 J; `' u
-0.4088 -0.0035];( r0 P, B" O$ E2 Q' \
% p0=[1 1 1 1 1 1];) y& a) x% z [" m8 K. d
p0=[0.005 0.005 0.005 0.005 0.005 0.005];
5 |* b# t, S' mwarning off$ ?- r3 E' k5 Q. P( A z9 t
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);
* s' _) C m0 k. e5 x% 拟合系数,最小二乘方法
* k/ w' S; I* N# o5 J$ @+ M8 Op=nlinfit(x,zeros(size(x,1),1),F,p0);$ R9 [! }* h v$ w
p(1)- H4 W4 y' T( E$ Q% j' }* |
p(2)
- D* t$ g0 G S$ pp(3)
& g* r' Z3 a8 ~- Y7 Lp(4)" E' A) [, E5 g) o8 s! T1 j: b9 R
p(5)* K; p$ Q5 w, N5 _9 c& X0 e: [* \7 B
p(6)+ \/ B8 j2 x3 G$ t9 y! R
?" @3 h& b9 F# f1 Z' K- W: m2 W9 ^ a
2 x0 j# @' \2 U1 s' wA=p(1)/p(6);, o2 { g9 n& g6 k
B=p(2)/p(6);
) {% F' m5 v( n- |. R; L8 nC=p(3)/p(6);: x+ ~/ s, R7 ^2 P, N" _4 A) W
D=p(4)/p(6);) ^4 t0 v$ t, K/ c( k8 b# T- F
E=p(5)/p(6);* w# w* ]5 b3 S8 N( c
3 Y F2 a; L6 x8 H
" l% w9 Q G* ?! a0 Z! L%%椭圆中心% g2 j, A! v. Q- M" N: G
X_center = (B*E-2*C*D)/(4*A*C - B^2);2 i" b( R: c$ p: ]
Y_center = (B*D-2*A*E)/(4*A*C - B^2);* J4 x1 g" ^- ^& e1 a6 L
fprintf(' X_center=%g, Y_center=%g\n',X_center,Y_center);
, z( Y) A' x. v! W x/ u%%长短轴
9 U" V) \" s5 S/ n& x* D' La= 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))));
4 Y3 v4 @ ~ j$ |- i# `# Rb= 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))));
; `8 M; h: L3 `- t. H
5 ?/ {5 m/ P' q* L0 Z* J2 Q% O+ A
1 Y4 J T1 o( c m8 m9 k%%长轴倾角
8 p e# Y5 b1 W8 kq=0.5 * atan(B/(A-C));
9 b! ?9 f9 a) Afprintf(' q=%g\n',q);
9 U A) N% a! m, M$ O8 Q
* G3 O% c- n w3 V4 C* z' y1 z; p8 ^2 j. @
fprintf(' a=%g, b=%g\n',a,b);; n3 l/ J7 q# J- I/ y: z
plot(x(:,1),x(:,2),'ro');
' Q; {+ M2 w5 `
& T. G! ?$ i3 e8 I) B2 |! F7 ~+ T! d: v* j- n
hold on;, w( V2 B8 F0 f! k
xmin=min(x(:,1)); z: i2 `2 H+ K
xmax=max(x(:,1));) r. ]* S' ~& M: M# m
ymin=min(x(:,2));
; R8 j; ~* q9 X+ v/ `ymax=max(x(:,2));; t% m8 ~" s, A: R
xmid=(xmax+xmin)/2;
( _+ K+ X4 A D& h: A3 ~& }ymid=(ymax+ymin)/2;
3 ~( N1 w2 ?( ^$ v0 g4 wstri=(xmax-xmid)*(ymax-ymid)/2;
* ]4 I$ r+ z( z0 i( G. TS=a*b*pi;
) e; G1 w1 C- f7 l4 e6 Cz=S/4/pi/stri;
) B3 e( V! q/ e% 将数据组集到data
8 D2 p3 Q( v* z g) K/ i0 gdata = [xmin',ymin',xmax',ymax',xmid',ymid',a', b', A', B',C',D',E',stri',S',z'];
2 F1 g; w6 o p% r) a6 ]% 将data切割成m*n的cell矩阵! b& f Q$ Y1 X- Q
[m, n] = size(data);
$ ~6 _9 z+ E# v4 t* rdata_cell = mat2cell(data, ones(m,1), ones(n,1));
, W8 t% r% U$ ^) y/ z$ D# F% 添加变量名称
' K! M3 W. \( N4 Etitle = {'xmin','ymin','xmax','ymax','xmid','ymid','a', 'b', 'A', 'B','C','D','E','stri','S','z'};% o0 Y6 i( N3 N9 Y9 E# \/ T# [
% 将变量名称和数值组集到result. \5 ?, u) y9 Y1 |! n
result = [title; data_cell];6 h" D1 z! ~0 \
% 将result写入到wind.xls文件中
5 {4 `! v3 H' R/ Z4 u2 p4 F) R% e2 Ps = xlswrite('wind.xls', result);
8 Q9 A! n) r# X: ^+ }
/ I H/ U6 q, i$ I. Q1 j$ G$ z8 \; u" q6 b" G' B
% 作图
1 r: V) o. ^8 h) J# A%ezplot(@(x,y)F(p,[x,y]),[xmin,xmax,ymin,ymax]);
' d s2 h: s8 H%title('曲线拟合');
/ S* R! N$ Y3 G! G) A8 w9 N" i%legend('样本点','拟合曲线')
9 A% l* L, s& M$ z
# b/ K a) r0 S6 Y
; x9 r4 M V1 ^: z* e8 [2 u. s2 M8 ]3 g$ I* N9 n* I- S
+ {& Z$ W4 {! f. e. T- D% `. q
' ?; D' C5 _2 [5 R p2 Z
) `, F. B+ P8 M/ e3 L0 B$ L! l
8 k8 X6 g0 ]0 _8 S! N& v' R |