clear all; W=200; str1 = 'D:\OneDrive\ansys_workpath_lab\matlab_partical_location\临时数据坐标'; str2 = '.txt'; for j=1:1:W n=250; L=0.04; R=0.00046; X=zeros(1,n); Y=zeros(1,n); X(1)=0.05*L+rand(1)*0.9*L; Y(1)=0.05*L+rand(1)*0.9*L; E=1; while X(n)==0 a=0.05*L+rand(1)*0.9*L; b=0.05*L+rand(1)*0.9*L; COUNT=0; for i=1:1:E if ((a-X(i))^2+(b-Y(i))^2)>=((2*R)^2*1.5) COUNT=COUNT+1; end end if COUNT==E E=E+1; X(E)=a; Y(E)=b; end end str3 = num2str(j); str_all = strcat(str1,str3,str2); fid=fopen(str_all,'wt'); for i=1:1:n fprintf(fid,'%4.8f\t',X(i)); end fprintf(fid,'\n'); for i=1:1:n fprintf(fid,'%4.8f\t',Y(i)); end fclose(fid); auto3_ANSYS_command_flow2(str_all,j); auto2_location_fractal(str_all,j); end fprintf(fid,'\n\n\n'); fclose(fid); %fid=fopen('D:\0528plotinput.txt','wt'); %fprintf(fid,'rectng,0,%4.3f,0,%4.3f,\n',L,L); %for i=1:1:n % fprintf(fid,'cyl4,%4.3f,%4.3f,%4.3f\n',X(i),Y(i),R); %end %fprintf(fid,'asel,,,,2,%d,1\n',n+1); %fprintf(fid,'cm,xiaoqu,area\nasel,,,,1\ncm,matrix,area\nallsel\nasba,matrix,xiaoqu\n'); %for i=1:1:n % fprintf(fid,'cyl4,%4.3f,%4.3f,%4.3f\n',X(i),Y(i),R); %end %fprintf(fid,'asel,,,,1,%d,1\ncm,particle,area\nallsel\n',n); %fprintf(fid,'asel,,,,%d\ncm,matrix,area',n+2); %fclose(fid);
时间: 2023-08-22 07:07:46 浏览: 125
这段代码是用 matlab 生成一些粒子的坐标,并将这些坐标写入到文本文件中,然后调用了两个函数 auto3_ANSYS_command_flow2 和 auto2_location_fractal,不过这两个函数的实现并不在代码中。其中,这段代码会循环执行 W 次,每次生成 n 个粒子的坐标,这些粒子的位置随机生成,并且要满足彼此之间的距离要大于等于 2*R*sqrt(3),其中 R 和 L 是两个常数。最终生成的 n 个粒子的坐标会被写入到不同的文本文件中,文件名根据循环变量 j 生成。
相关问题
function auto2_location_fractal(file_str,j) a=importdata(file_str);%读取坐标 X=a(1,:);%X为a的第一行,即横坐标 Y=a(2,:);%y为a的第二行,即纵坐标 L=0.04; center = [0.5*L,0.5*L];%选定图像中心 k = 1; step = 0.05*L;%步长,可调,越大越快,越小越慢,一般越小越精确 for r = 2*step:step:min(center(1),center(2))-step%选择一系列矩形,可调初始边长,边长递增幅度 R = 2*r; %A = imm1(center(1)-r:center(1)+r,center(2)-r:center(2)+r);%选定中心在图像中心,边长为R的正方形 Xmin = center(1)-r; Xmax = center(1)+r; Ymin = center(2)-r; Ymax = center(2)+r; N = 0; sum_ri = 0; for ii = 1:length(X) if (X(ii)>=Xmin) && (X(ii)<= Xmax) && (Y(ii)>=Ymin) && (Y(ii)<= Ymax) N = N + 1; dist = pdist2([X(ii),Y(ii)],center); sum_ri = sum_ri + dist^2; end end Rg(k) = sqrt(sum_ri/N);%计算得当量边长 XX(k) = log(Rg(k));%横坐标变量 YY(k) = log(N);%纵坐标变量 k = k +1; end plot(XX,YY); %绘制曲线 p=polyfit(XX(1,2:end-1),YY(1,2:end-1),1);%求拟合曲线斜率,可调曲线范围 P=p(1); % str1 = 'D:\文件夹\OneDrive\2021有限元模拟\20220220试验\'; % str2 = '.TXT'; % str3 = num2str(j); % str4 = num2str(P); % str5 = 'P_'; % str_all = strcat(str1,str3,str5,str4,str2); % fid=fopen(str_all,'wt');%打开命令流文件准备书写 fid=fopen('D:\OneDrive\ansys_workpath_lab\matlab_P\P值_坐标计算.txt','a+');%打开命令流文件准备书写 fprintf(fid,'P%d——%4.5f\n',j,P); end
这段代码是一个计算分形维度的程序,主要是通过对一系列矩形内的点进行计数和距离计算,得到一组数据,再通过拟合曲线的斜率来计算分形维度P值。其中,file_str是坐标文件路径,j是文件序号,L是边长,center是中心点,step是步长,Rg是当量边长,XX和YY是分别对应横纵坐标的数组,p和P是拟合曲线的参数和斜率,str1到str5是用于文件命名的字符串变量,fid是文件流指针。
import pandas as pd import os Workpath = 'D:\PACK数据\规范化文件\功能测试数据' for filename in os.listdir(Workpath): path_excel = os.path.join(Workpath, filename) da = pd.read_excel(path_excel, sheet_name='详细') data = da.groupby('步骤序号').tail(1) # Handling CAN0_Cell columns max_number_cell = 0 for column_name in data.columns: if isinstance(column_name, str) and 'CAN0_Cell_' in column_name: num_str = column_name.split('_')[-1] num_cell = int(num_str) max_number_cell = max(max_number_cell, num_cell) if num_cell < 500: # Adding new columns and setting their data as None for i in range(max_number_cell + 1, 491): new_column_name = f'CAN0_Cell_{i:03d}' data[new_column_name] = None # Sorting columns containing "CAN0_Cell_" column_names_cell = [col for col in data.columns if col.startswith('CAN0_Cell_')] sorted_column_names_cell = sorted(column_names_cell, key=lambda x: int(x.split('_')[-1]) if x.split('_')[-1].isdigit() else 0) data = data[sorted_column_names_cell],这个代码·运行后data中不包含CAN0_Cell的列就没了,怎么实现
很抱歉,我之前给出的代码有误导性,并且对于您的问题没有给出正确的解决方案。以下是一个修改后的代码,用于在DataFrame中筛选出以"CAN0_Cell_"开头的列,并按照列名中的数字顺序对这些列进行排序:
```python
import pandas as pd
import os
Workpath = 'D:\PACK数据\规范化文件\功能测试数据'
for filename in os.listdir(Workpath):
path_excel = os.path.join(Workpath, filename)
da = pd.read_excel(path_excel, sheet_name='详细')
data = da.groupby('步骤序号').tail(1)
# Handling CAN0_Cell columns
column_names_cell = [col for col in data.columns if col.startswith('CAN0_Cell_')]
sorted_column_names_cell = sorted(column_names_cell,
key=lambda x: int(x.split('_')[-1]) if x.split('_')[-1].isdigit() else 0)
data = data[sorted_column_names_cell]
# Adding missing CAN0_Cell columns
max_number_cell = int(sorted_column_names_cell[-1].split('_')[-1]) if sorted_column_names_cell else 0
for i in range(max_number_cell + 1, 491):
new_column_name = f'CAN0_Cell_{i:03d}'
data[new_column_name] = None
# Sorting columns again to include newly added columns
sorted_column_names_cell = sorted(data.columns,
key=lambda x: int(x.split('_')[-1]) if x.split('_')[-1].isdigit() else 0)
data = data[sorted_column_names_cell]
# Output the modified DataFrame
print(data)
```
在这个修改后的代码中,我们首先筛选出以"CAN0_Cell_"开头的列,并按照列名中的数字顺序对这些列进行排序。然后,我们通过获取最大数字来确定需要添加的缺失列,并逐个添加到DataFrame中。接下来,我们再次按照列名中的数字顺序对DataFrame进行排序,以确保新添加的列也按照正确的顺序包含在其中。
请注意,这里的代码仅仅是输出了修改后的DataFrame,您可以根据实际需求进行相应的处理或保存操作。如果对这个代码有任何疑问或需要进一步的帮助,请随时提问。
阅读全文