脾气除以零.为什么? [英] Numpy divide by zero. Why?

查看:77
本文介绍了脾气除以零.为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import pygame
import random
import math
import numpy as np
import matplotlib.pyplot as plt
fx = np.zeros([11])
fy = np.zeros([11])
x = np.zeros([11])
y = np.zeros([11])
x[0] = 11
y[0] = 1
sigma = 1.01
e = 1.1
dt = 0.1
def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            rx = (x[i]-x[j])
            ry = (y[i]-y[j])
            fx[i] = 24*e*(((2/rx)*sigma/rx**12)-((1/rx)*sigma/rx**6))
            fy[i] = 24*e*(((2/ry)*sigma/ry**12)-((1/ry)*sigma/ry**6))
    print fx, fy

为什么我仍然收到错误消息 RuntimeWarning: divide by zero encountered in double_scalars

Why am I still getting errors RuntimeWarning: divide by zero encountered in double_scalars and

RuntimeWarning: invalid value encountered in double_scalars

我得到的结果是

[  0.  nan  nan  nan  nan  nan  nan  nan  nan  nan   0.] [  0.  nan  nan  nan  nan  nan  nan  nan  nan  nan   0.]

我试图修改x和y开头,但是没有效果.

I tried to modify starting x and y but that gave no effect.

推荐答案

在此代码中:

def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            ...

如果为i == j,则表示正在将粒子与其自身进行比较.尝试像这样跳过for循环的迭代:

If i == j, you are comparing a particle to itself. Try skipping that iteration of the for-loops like so:

def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            if i == j:
                continue
            rx = (x[i]-x[j])
            ry = (y[i]-y[j])
            fx[i] = 24*e*(((2/rx)*sigma/rx**12)-((1/rx)*sigma/rx**6))
            fy[i] = 24*e*(((2/ry)*sigma/ry**12)-((1/ry)*sigma/ry**6))

此外,您将需要为x和y列表输入实际值,因为它们当前均为0.完全在同一位置的两个粒子将根据该方程施加无限量的力,因此在这种情况下除以0就是正确的.

Also, you will need to put in actual values for the x and y lists, as they are all currently 0's. Two particles at exactly the same location exert an infinite amount of force according to that equation, so the divide by 0 is accurate in that scenario.

这篇关于脾气除以零.为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆