BUPT丶云卷云舒 2021-07-03 13:23 采纳率: 100%

# 如何让一个函数循环执行100次生成不同的结果并存入列表？

``````
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
import numpy as np
from math import *
import matplotlib.pyplot as plt
from scipy.optimize import minimize
from numpy import *
from numpy.linalg import inv, qr

Noise = 1        #噪声方差
a = random.random(3)
r = np.zeros(3)
for i in range(0,3):
r[i]=2*a[i]-1                                   #随机生成一个-1到1的数

def opt_location(range1, anchors):               #range1是真实测得的toa

def con():
# 约束条件 分为eq 和ineq
# eq表示 函数结果等于0 ； ineq 表示 表达式大于等于0
x1min, x1max, x2min, x2max = -5, 15, -5, 15
cons = ({'type': 'ineq', 'fun': lambda x: x[0] - x1min},              #x[0]-x1min >= 0
{'type': 'ineq', 'fun': lambda x: -x[0] + x1max},
{'type': 'ineq', 'fun': lambda x: x[1] - x2min},
{'type': 'ineq', 'fun': lambda x: -x[1] + x2max})
return cons                #

def cost(pos):#***************
ref = np.sqrt(np.sum((anchors-pos.reshape(1,2))**2, axis=1))         #anchors为四个基站的位置，pos为要优化的位置
ref0 = ref[1:] - ref[0]
ref1 = ref[2:] - ref[1]
ref2 = ref[3:] - ref[2]                            #tdoa
Ri_0 = range1[1:] - range1[0] + 3*Noise*r[0]
Ri_1 = range1[2:] - range1[1] + 2*Noise*r[1]
Ri_2 = range1[3:] - range1[2] + Noise*r[2]                       #真实测得的tdoa
return np.sum((Ri_0 - ref0)**2) + np.sum((Ri_1 - ref1)**2) + np.sum((Ri_2 - ref2)**2)    #目标函数的目的是要求所估计位置和各基站的tdoa
#和真实测得的tdoa相差最小

x0 = np.array([5, 5])
res = minimize(cost, x0, constraints=con()).x
return res
def test():
#pos = np.array([0,4])
z = opt_location(range1, anchors)
return z

anchors = np.array([[0,0],[0,10],[10,10],[10,0]])
#range = np.array([7.07106781,7.07106781,7.07106781,7.07106781])
rangetoa = np.array([0.00000002358654336 , 0.00000002358654336 ,0.00000002358654336 ,0.00000002358654336])  #移动台为5 5的toa
#rangetoa = np.array([0.00000001886923469 , 0.00000002405364897,0.00000002830385204 ,0.00000002405364897])#移动台为4 4 的toa
rangetoa = np.array([0.00000002540348465, 0.00000001415192602,0.00000002540348465 ,0.00000003302116071])#移动台为3 7 的toa
#rangetoa = np.array([0.00000002028991179, 0.00000001375319997,0.00000003285225341 ,0.00000003608047346])  #移动台为1 6的toa
range1 = rangetoa * 299792458

position = np.zeros((100,2),dtype = float)
for i in range (0,100):
position[i] = test()

print(position)
``````
• 写回答

#### 2条回答默认 最新

• 宁缺灬 2021-07-03 15:56
关注

好吧，换了python37可以跑，老版本需要手动引入。
你的r作为全局变量，赋值只操作了一次，后续每次test送入的range1,anchors都是不会变动值的变量，全是固定值的变量，结果当然都一样。。。

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 问题事件

• 已结题 （查看结题原因） 5月30日

#### 悬赏问题

• ¥15 调用函数时，无关变量的改变引起函数值的改变
• ¥15 xy坐标转化为经纬度坐标
• ¥15 一般三角模糊数的上界值和下届值取中值的多少比较合理？
• ¥15 关于#python#的问题，请各位专家解答！
• ¥20 Hbase启动失败，无法启动HMaster
• ¥15 sqpingboot在父模块已经引入了mybatisplus 在子组件不写版本号还是报错
• ¥20 Lumerical FDTD solutions 中模型的相对阻抗，有效介电常数和有效磁导率的实部和虚部的数据如何获得？
• ¥100 sql reporting service 远程smtp服务器配置支持
• ¥15 ppyoloe_r带角度目标检测，loss_cls没法收敛
• ¥15 淘宝交易指数如何解读，其关联的数据指标是什么